110,536
社区成员
发帖
与我相关
我的任务
分享
public class Simple
{
public stringName{get;set;}
public int value{get;set;}
}
foreach (var x in a.Combination(a.Count(), 3))
{
var n = x.Select(p => p.value).Distinct().Count();
if(n == x.Count()) Console.WriteLine(string.Join(",", x));
}
}
static void Main(string[] args)
{
var a = new List<Simple>()
{
new Simple() {Name="a",value=1},
new Simple() {Name="b",value=2},
new Simple() {Name="c",value=1},
new Simple() {Name="d",value=4},
new Simple() {Name="a",value=1},
new Simple() {Name="e",value=3},
new Simple() {Name="f",value=4},
new Simple() {Name="g",value=5},
};
var q = a.Distinct(p =>p.value);
Console.WriteLine(string.Join(",", q));
foreach (var x in q.Combination(q.Count(), 3))
{
Console.WriteLine(string.Join(",", x));
}
}
其中new Simple() {Name="a",value=1}
和new Simple() {Name="c",value=1}
不能组合,value相同,但是他俩分别可以和new Simple() {Name="b",value=2}
组合,您的结果之中,去掉了 new Simple() {Name="c",value=1}
,这样结果就少掉了。
static void Main(string[] args)
{
var a = new List<Simple>()
{
new Simple() {Name="a",value=1},
new Simple() {Name="b",value=2},
new Simple() {Name="c",value=1},
new Simple() {Name="d",value=4},
new Simple() {Name="a",value=1},
new Simple() {Name="e",value=3},
new Simple() {Name="f",value=4},
new Simple() {Name="g",value=5},
};
//var q = a.Distinct(p =>p.value);
//Console.WriteLine(string.Join(",", q));
foreach (var x in a.Combination(a.Count(), 3))
{
var d = new Dictionary<int, int>();
foreach (var t in x) d[t.value] = 1;
if(d.Count == x.Count()) Console.WriteLine(string.Join(",", x));
}
}
public class Simple
{
public string Name{get;set;}
public int value{get;set;}
public override string ToString()
{
return string.Format("{{Name:{0} Value:{1}}}", Name, value);
}
}
public class Simple
{
public string Name{get;set;}
public int value{get;set;}
public override string ToString()
{
return string.Format("{{Name:{0} Value:{1}}}", Name, value);
}
}
static void Main(string[] args)
{
var a = new List<Simple>()
{
new Simple() {Name="a",value=1},
new Simple() {Name="b",value=2},
new Simple() {Name="c",value=1},
new Simple() {Name="d",value=4},
new Simple() {Name="a",value=1},
new Simple() {Name="e",value=3},
new Simple() {Name="f",value=4},
new Simple() {Name="g",value=5},
};
var q = a.Distinct(p =>p.value);
Console.WriteLine(string.Join(",", q));
foreach (var x in q.Combination(q.Count(), 3))
{
Console.WriteLine(string.Join(",", x));
}
}
public static IEnumerable<IEnumerable<TValue>> Combination<TValue>(
this IEnumerable<TValue> values,
Int32 count,
Int32 num)
{
var t = Enumerable.Range(0, num).ToList();
do
{
yield return values.Where((x, i) => t.Contains(i));
}
while (NextCombination(t, count, num));
}
public static bool NextCombination(List<int> ar, int num, int k)
{
if (ar.Count() != k) ar = Enumerable.Range(0, k).ToList();
bool changed = false, finished = false;
if (k > 0)
{
for (int i = k - 1; !changed && !finished; i--)
{
if (ar[i] < (num - 1) - (k - 1) + i)
{
ar[i]++;
if (i < k - 1)
{
for (int j = i + 1; j < k; j++)
{
ar[j] = ar[j - 1] + 1;
}
}
changed = true;
}
finished = (i == 0);
}
}
return changed;
}
}
public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
{
private Func<T, V> keySelector;
public CommonEqualityComparer(Func<T, V> keySelector)
{
this.keySelector = keySelector;
}
public bool Equals(T x, T y)
{
return EqualityComparer<V>.Default.Equals(keySelector(x), keySelector(y));
}
public int GetHashCode(T obj)
{
return EqualityComparer<V>.Default.GetHashCode(keySelector(obj));
}
}
public static class DistinctExtensions
{
public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
{
return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
}
}
static void Main(string[] args)
{
var a = new List<Simple>()
{
new Simple() {Name="a",value=1},
new Simple() {Name="b",value=2},
new Simple() {Name="c",value=1},
new Simple() {Name="d",value=4},
};
var q = a.Distinct(p =>p.value);
foreach (var x in q)
{
Console.WriteLine("Name:{0}, value:{1}", x.Name, x.value);
}
}