using System.Collections.Generic;
static Dictionary<string, uint> SmartSummaryItemIdToIndex = new();
public static bool GetDiskNumberByItemID(string itemId, out uint index)
var str = itemId.ToString();
var tempIndex = SmartSummaryItemIdToIndex.Where(x => str.StartsWith(x.Key.ToString()) || x.Key.ToString().StartsWith(str));
if (tempIndex.Any() && tempIndex.Count() > 1)
Console.WriteLine($"{nameof(GetDiskNumberByItemID)}: Found more than 1 similar ItemId: {itemId}");
index = tempIndex.Any() ? tempIndex.First().Value : (uint)SmartSummaryItemIdToIndex.Count;
if (index == SmartSummaryItemIdToIndex.Count)
SmartSummaryItemIdToIndex.Add(itemId, index);
public static void Main()
const string diskItemIdSD1 = @"Disk_SCSI\DISK&VEN_NVME&PROD_PC611_NVME_SK_HY\4&8FC8723&0&040000";
const string diskItemIdSD2 = @"Disk_SCSI\DISK&VEN_NVME&PROD_PC611_NVME_SK_HY\4&8FC8723&0&030000";
const string diskItemIdSN2_1 = @"Disk_SCSI\DISK&VEN_NVME&PROD_PC611_NVME_SK_HY\4&8FC8723&0&030000_RKM0TX3TKS0510N220JE";
const string diskItemIdSN2_2 = @"Disk_SCSI\DISK&VEN_NVME&PROD_PC611_NVME_SK_HY\4&8FC8723&0&030000_RKM0TX3TKS0510N221JF";
SmartSummaryItemIdToIndex = new();
List<string> diskItemIdLongerAfterShorter = new() {diskItemIdSD1, diskItemIdSD2, diskItemIdSN2_1, diskItemIdSN2_2, diskItemIdSD1};
foreach (var itemId in diskItemIdLongerAfterShorter)
GetDiskNumberByItemID(itemId, out uint index);
Console.WriteLine($" {index}");
Console.WriteLine($"----");
SmartSummaryItemIdToIndex = new();
List<string> diskItemIdShorterAfterLonger = new() {diskItemIdSD1, diskItemIdSN2_1, diskItemIdSN2_2, diskItemIdSD2, diskItemIdSD1};
foreach (var itemId in diskItemIdShorterAfterLonger)
GetDiskNumberByItemID(itemId, out uint index);
Console.WriteLine($" {index}");