2012-08-27 4 views
-1

я следующий код в словарекак разделить серийный номер строки массива

SN00001002001 
SN00001002002 
SN00001002003 
SN00001002004 
... 
AN00001002006 
AN00001002007 
AN00001002008. 

Я хочу, чтобы отобразить его как

SN00001002 001-006 6(count) 
AN00001002 001-008 8(count) 

я использовал следующий код

Dictionary<object, int> counts = new Dictionary<object, int>(); 

      foreach (string item in str1) 
      { 
       if (!counts.ContainsKey(item1)) 
        { 
         counts.Add(item1, 1);       
        }     } 
       else 
       { 
        counts[item]++;       
       } 
      } 

отображает счета правильно, так как

SN00001002 6(count) 
AN00001002 8(count) 

, но не с серийным номером. может ли кто-нибудь предложить идею для этого.

+0

Ваш код является синтаксически неправильным. Также вы можете добавить строку, в которой выводятся счетчики. – konqi

+0

Что такое str1 ?? –

ответ

2

Попробуйте это ...

var serialNumbers = from sn in str1 
     group sn by sn.Substring(0, 10) into g 
     select new { 
         Key = g.Key, 
         Cnt = g.Count(), 
         Min = g.Min(v => v.Substring(10)), 
         Max = g.Max(v => v.Substring(10)) 
        }; 

foreach (var sn in serialNumbers) 
{ 
    Console.WriteLine("{0} {1}-{2} {3}(count)", sn.Key, sn.Min, sn.Max, sn.Cnt); 
} 

Вот код, который я использовал для тестирования выше (от LINQPad)

List<string> str1 = new List<string>(); 
str1.Add("SN00001002001"); 
str1.Add("SN00001002002"); 
str1.Add("SN00001002003"); 
str1.Add("SN00001002004"); 
str1.Add("SN00001002005"); 
str1.Add("SN00001002006"); 
str1.Add("AN00001002001"); 
str1.Add("AN00001002002"); 
str1.Add("AN00001002003"); 
str1.Add("AN00001002004"); 
str1.Add("AN00001002005"); 
str1.Add("AN00001002006"); 
str1.Add("AN00001002007"); 
str1.Add("AN00001002008"); 

var serialNumbers = from sn in str1 
    group sn by sn.Substring(0, 10) into g 
    select new { Key = g.Key, Cnt = g.Count(), Min = g.Min(v => v.Substring(10)), Max = g.Max(v => v.Substring(10))}; 

foreach (var sn in serialNumbers) 
{ 
    string serialNumber = string.Format("{0} {1}-{2} {3}(count)", sn.Key, sn.Min, sn.Max, sn.Cnt); 
    serialNumber.Dump(); 
} 

Выход ...

SN00001002 001-006 6(count) 
AN00001002 001-008 8(count) 
+0

привет, Gene S, его хорошо работает, спасибо много ... но небольшая ошибка для меня в Dump(). Можете ли вы объяснить это плз. – chitra

+0

Джин, я закончил, его очень полезно и просто, спасибо u – chitra

+1

@chitra. Дамп - это расширение, используемое только в LinqPad. Если у вас нет LinqPad, возможно, консольное приложение с Console.WriteLine будет работать лучше. –

Смежные вопросы