using System.Collections.Generic;
public static bool SetsEquals(params int[][] sets)
if (!(sets?.Length > 0)) throw new ArgumentException("There must be one then one set", nameof(sets));
for (var i = 1; i < sets.Length; i++)
if (sets[0].Length != sets[i].Length)
var len = sets[0].Length;
var hash = new HashSet<int>();
for (var i = 0; i < len; i++)
if (!hash.Add(sets[0][i]))
for (var i = 0; i < len; i++)
for (var j = 1; j < sets.Length; j++)
if (hash.Add(sets[j][i]))
public static bool SetsEquals2(params int[][] sets)
if (!(sets?.Length > 0)) throw new ArgumentException("There must be one then one set", nameof(sets));
.All(x => x.Count() == sets.Length);
public static bool SetsEquals3(params int[][] sets)
if (!(sets?.Length > 0)) throw new ArgumentException("There must be one then one set", nameof(sets));
.Select(x => x.OrderBy(y => y))
.All(x => x.SequenceEqual(orderedSets[0]));
public static void Main(string[] args)
var list1 = new []{1, 2, 3, 4, 5};
var list2 = new[] { 1, 2, 3, 4, 5};
var list3 = new[] { 2, 3, 4, 5, 1 };
Console.WriteLine(SetsEquals(list1, list2, list3));
Console.WriteLine(SetsEquals2(list1, list2, list3));
Console.WriteLine(SetsEquals3(list1, list2, list3));