讓我們說我們有休耕類「X」的所有可能的類的組合,「Y」,「Z」, 結果,所以我需要將這樣的如何獲得在C#
(X),(X,Y),(X,Z),(X,Y,Z),(Y),(Y,Z),(Z)
如果我們有「X」,「Y」,「Z」,「J」, 結果,所以我需要將這樣的
(X), (X,Y),(X,Z),(X,J), (Y), (Y,Z),(Y,J), (Z),(Z,J)
(X,Y,Z), (X,Y,Z,J), (Y,Z,J), (Z,J,X)
什麼算法,我需要做到這一點?
讓我們說我們有休耕類「X」的所有可能的類的組合,「Y」,「Z」, 結果,所以我需要將這樣的如何獲得在C#
(X),(X,Y),(X,Z),(X,Y,Z),(Y),(Y,Z),(Z)
如果我們有「X」,「Y」,「Z」,「J」, 結果,所以我需要將這樣的
(X), (X,Y),(X,Z),(X,J), (Y), (Y,Z),(Y,J), (Z),(Z,J)
(X,Y,Z), (X,Y,Z,J), (Y,Z,J), (Z,J,X)
什麼算法,我需要做到這一點?
你在找什麼叫做power set。有遞歸和迭代的方法來計算它;谷歌應該不會很困難。
嘗試實現一個算法,並回來更新問題,如果你有特定的麻煩。
如果這是一個能量集,你錯過了空集(當然,它總是一個能量集的成員!)。通過「假裝」的組合是二進制數
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
class Program
{
static void Main()
{
string[] classes = {"X", "Y", "Z"};
foreach (var combination in PowerSet(classes))
{
foreach (var item in combination)
{
Console.Write(item + ", ");
}
Console.WriteLine("");
}
}
public static IEnumerable<IEnumerable<T>> PowerSet<T>(T[] sequence)
{
return from m in Enumerable.Range(0, 1 << sequence.Length)
select
from i in Enumerable.Range(0, sequence.Length)
where (m & (1 << i)) != 0
select sequence[i];
}
}
}
該算法的工作:
無論如何,這樣的事情可能會爲你工作。有關詳細信息,請參閱http://en.wikipedia.org/wiki/Power_set(特別是標題爲「將子集表示爲功能」的部分)。
你說的是類嗎?在C#類中?我猜不是,但你的問題並不清楚。聽起來有點家庭作業。 – Cylindric
有幾個算法,包括這裏的實現:http://stackoverflow.com/questions/999050/most-elegant-way-to-get-all-subsets-of-an-array-in-c-sharp – kuba
爲什麼'(J)'和'(X,Y,Z)'不在你的第二個列表中? –