2016-11-11 1 views
0

코드에서 모든 집합의 2 요소 하위 집합을 생성하려고합니다. 예 : 목록에 {1,2,3,4}가 포함되어 있으면 2 요소 하위 집합은 {1,2}, {1,3}, {1,4}, {2,3}, {2,4}, {3,4}. 나는 논리가 붙어있어서 더 이상 갈 수 없다. 어떤 도움을 주시면 감사하겠습니다.두 요소 하위 집합을 사용하여 C#

 class Program 
     { 
     static List<SortedSet<string>> _items = new List<SortedSet<string>>(); 
     static SortedSet<string> set = new SortedSet<string>(); 
     static void Main(string[] args) 
     { 
     int i, j, a, b; 
     string k; 
     Console.WriteLine("\n Enter the number of set to be used: "); 
     i = Convert.ToInt32(Console.ReadLine()); 
     for (j = 1; j <= i; j++) 
     { 
      SortedSet<string> set = new SortedSet<string>(); 
      do 
      { 
       Console.WriteLine("Enter first element in set {0}:", j); 
       k = Console.ReadLine(); 
       if (k != "stop") 
        set.Add(k); 
      } while (k != "stop"); 
      _items.Add(set); 
     } 
     } 

     public void DisplayTwoElementSets(List<string> set) 
     { 
      foreach (string item in set) 
      { 
       GenerateTwoElementSet(setNumber); 
      } 

     } 
     private void GenerateTwoElementSet(int setNumber) 
     { 
      SortedSet<string> originalSet = _items[setNumber]; 
      List<SortedSet<string>> twoItemSets = new List<SortedSet<string(); 
      foreach (string item in originalSet) 
      { 
       Console.WriteLine(item); 
      } 
     } 
+0

이 전체 코드인가? 우리가 놓친 게 있니? – Searching

답변

0

나는 당신에 붙어있는 부분은 코드의 아래쪽에 Console.WriteLine(item); 자리가 있으리라 믿고있어.

목표는 일련의 값 범위에서 고유 한 쌍 조합 목록을 만드는 것입니다. 가장 간단한 방법은 내부 루프의 인덱스 값이 외부 루프의 인덱스 값에 종속되는 두 개의 중첩 된 for 루프를 사용하는 것입니다.

목록 또는 세트에 이러한 세트를 저장할 수 있지만 가장 적합한 유형은 터플입니다. Tuple은 지정한 값의 수 (이 경우 2)를 보유하고 이름 지정 체계 Item1, 항목 2 , Item3 등을 사용하여 속성의 순서를 유지합니다.

(이 메서드는 같은 당신의 Main 방법을 보유하고, 그래서 정신을 위해, 그것은 최고 클래스는 정적이 선언)

private static List<Tuple<int, int>> GenerateTwoElementSet(int setNumber) 
{ 
    List<Tuple<int, int>> set = new List<Tuple<int, int>>(); 

    for (int i = 1; i <= setNumber; i++) 
    { 
     for (int j = i + 1; j <= setNumber; j++) 
     { 
      set.Add(new Tuple<int, int>(i, j)); 
     } 
    } 

    return set; 
} 

당신은 같은 세트의 값을 얻을 수 있습니다.

var set = GenerateTwoElementSet(4); 
foreach (var tuple in set) 
{ 
    Console.WriteLine("{" + tuple.Item1 + "," + tuple.Item2 +"}"); 
} 

// Outputs the following: 
// {1,2} 
// {1,3} 
// {1,4} 
// {2,3} 
// {2,4} 
// {3,4} 

EDIT : 숫자 범위가 아닌 기존 목록에서 쌍을 만들려면 논리가 동일합니다. 위의 방법에서 나온 숫자를 목록의 색인으로 사용하면됩니다.

private static List<Tuple<string, string>> GenerateTwoElementSetFromList(List<string> list) 
{ 
    List<Tuple<string, string>> set = new List<Tuple<string, string>>(); 

    for (int i = 0; i < list.Count; i++) 
    { 
     for (int j = i + 1; j < list.Count; j++) 
     { 
      set.Add(new Tuple<string, string>(list[i], list[j])); 
     } 
    } 

    return set; 
} 

그리고 당신과 같이 사용 :

List<string> list = new List<string> 
{ 
    "apple", 
    "pear", 
    "orange", 
    "plum" 
}; 

var set = GenerateTwoElementSetFromList(list); 

foreach (var tuple in set) 
{ 
    Console.WriteLine("{" + tuple.Item1 + "," + tuple.Item2 +"}"); 
} 

// Outputs the following: 
// {apple,pear} 
// {apple,orange} 
// {apple,plum} 
// {pear,orange} 
// {pear,plum} 
// {orange,plum} 
+0

위의 코드는 목록에 숫자를 넣으려는 경우에 true입니다. 문자열의 경우 ...이 경우 사용자에게 몇 세트가 필요한지 그리고 그 세트 내에서 원하는 것은 무엇입니까? 그리고 나서 두 개의 요소 집합을 생성 한 다음 두 개의 요소 집합을 표시해야합니다. –

+0

@KinjalMaruShah 귀하의 질문에 포함시키는 것이 좋은 정보 였지만 편집을 참조하십시오. – Abion47