Если вы хотите знать, если есть дубликаты, но не волнует, что они ...
Самый простой способ (предполагая, что ровно два дефиса).
Boolean hasDuplicatePrefixes = list
.GroupBy(i => i.Substring(0, i.LastIndexOf('-')))
.Any(g => g.Count() > 1)
Самый быстрый способ (по крайней мере, для больших наборов строк).
HashSet<String> hashSet = new HashSet<String>();
Boolean hasDuplicatePrefixes = false;
foreach (String item in list)
{
String prefix = item.Substring(0, item.LastIndexOf('-'));
if (hashSet.Contains(prefix))
{
hasDuplicatePrefixes = true;
break;
}
else
{
hashSet.Add(prefix);
}
}
Если есть случаи с более чем двумя штрихами, используйте следующее. Это будет продолжаться с одной тире.
String prefix = item.Substring(0, item.IndexOf('-', item.IndexOf('-') + 1));
В .NET 2.0 Dictionary<TKey, TValue>
использования вместо HashSet<T>
.
Dictionary<String, Boolean> dictionary= new Dictionary<String, Boolean>();
Boolean hasDuplicatePrefixes = false;
foreach (String item in list)
{
String prefix = item.Substring(0, item.LastIndexOf('-'));
if (dictionary.ContainsKey(prefix))
{
hasDuplicatePrefixes = true;
break;
}
else
{
dictionary.Add(prefix, true);
}
}
Если вы не заботитесь о читаемости и скорости, использовать массив вместо списка, и вы настоящий фанат регулярных выражений, вы можете сделать следующее тоже.
Boolean hasDuplicatePrefixes = Regex.IsMatch(
String.Join("#", list), @".*(?:^|#)([0-9]+-[0-9]+-).*#\1");
V.good. Код конечно помогает. – shahkalpesh
HashSet? в котором есть версия .net? – shahkalpesh
HashSet 3.5+ –