Check if all items are the same in a List

喜欢而已 提交于 2019-12-28 03:51:43

问题


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.

Thanks


回答1:


Like this:

if (list.Distinct().Skip(1).Any())

Or

if (list.Any(o => o != list[0]))

(which is probably faster)




回答2:


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;
    }



回答3:


VB.NET version:

If list.Distinct().Skip(1).Any() Then

Or

If list.Any(Function(d) d <> list(0)) Then



回答4:


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.




回答5:


My variant:

var numUniques = 1;
var result = list.Distinct().Count() == numUniques;


来源:https://stackoverflow.com/questions/5307172/check-if-all-items-are-the-same-in-a-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!