반응형
Check if all items are the same in a List
I have a List(Of DateTime) items. How can I check if all the items are the same with a LINQ query? At any given time there could be 1, 2, 20, 50 or 100 items in the list.
Like this:
if (list.Distinct().Skip(1).Any())
Or
if (list.Any(o => o != list[0]))
(which is probably faster)
I created simple extension method mainly for readability that works on any IEnumerable.
if (items.AreAllSame()) ...
And the method implementation:
/// <summary>
/// Checks whether all items in the enumerable are same (Uses <see cref="object.Equals(object)" /> to check for equality)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="enumerable">The enumerable.</param>
/// <returns>
/// Returns true if there is 0 or 1 item in the enumerable or if all items in the enumerable are same (equal to
/// each other) otherwise false.
/// </returns>
public static bool AreAllSame<T>(this IEnumerable<T> enumerable)
{
if (enumerable == null) throw new ArgumentNullException(nameof(enumerable));
using (var enumerator = enumerable.GetEnumerator())
{
var toCompare = default(T);
if (enumerator.MoveNext())
{
toCompare = enumerator.Current;
}
while (enumerator.MoveNext())
{
if (toCompare != null && !toCompare.Equals(enumerator.Current))
{
return false;
}
}
}
return true;
}
My variant:
var numUniques = 1;
var result = list.Distinct().Count() == numUniques;
This is an option, too:
if (list.TrueForAll(i => i.Equals(list.FirstOrDefault())))
It is faster than if (list.Distinct().Skip(1).Any())
, and performs similarly as if (list.Any(o => o != list[0]))
, however, the difference is not significant, so I suggest using the more readable one.
VB.NET version:
If list.Distinct().Skip(1).Any() Then
Or
If list.Any(Function(d) d <> list(0)) Then
ReferenceURL : https://stackoverflow.com/questions/5307172/check-if-all-items-are-the-same-in-a-list
반응형
'programing' 카테고리의 다른 글
엑셀 파일을 열 때 계산 모드를 수동으로 설정하는 방법은 무엇입니까? (0) | 2023.06.09 |
---|---|
SQL 예외:jdbc:oracle:thin:@//localhost:1521/orcl에 적합한 드라이버를 찾을 수 없습니다. (0) | 2023.06.09 |
What does @@variable mean in Ruby? (0) | 2023.06.04 |
How to increase request timeout in IIS? (0) | 2023.06.04 |
iOS의 UITableView 섹션 확장/축소 (0) | 2023.06.04 |