2016-01-25 33 views
-1

我有這些名字:如何檢查一個項目是否跟隨列表中的另一個項目? C#

Sean 
Winnie 
Brian Amy 
Samir 
Joe Bethany 
Bruno Anna Matthew Lucas 
Gabriel Martha Philip 
Andre 
Danielle 
Leo Cinthia 
Paula 
Mary Jane 
Anderson 
Priscilla 
Regis Julianna Arthur 
Mark Marina 
Alex Andrea 

演習說,通過在一行空格分隔的名字,不能送禮物給對方。喜歡利奧不能給禮物Cinthia,喬不能給予Bethany等

所以我正在尋找一個代碼,我可以用來檢查,如果我有一個列表,並且行被導入到列表,然後我想後面的空間,以檢查是否有一定的字符串(如獅子座之後Cinthia),那麼這兩個人不能送禮物給對方。

到目前爲止我在這裏:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

namespace SecretSanta 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      StreamReader File = new StreamReader("SSfile.txt"); 
      List<string> Names = new List<string>(); 
      string line = File.ReadLine(); 

      while (line != null) 
      { 
       Console.WriteLine(line); 
       line = File.ReadLine(); 
       Names.Add(line); 
      } 

      Console.ReadKey();  
     } 
    } 
} 
+2

,什麼是你的問題? – acostela

+0

所以我期待其次,我可以用它來檢查,如果我有一個列表和線導入到列表,然後我想檢查是否有一定的字符串(如獅子座之後Cinthia)代碼在這個空間裏,那兩個人不能相互贈送禮物。 –

+0

很多事情可以在這裏做的,但這裏有一個快速的片段,也許你指出正確的方向:'變種名稱= line.Split(」」,StringSplitOptions.RemoveEmptyEntries)'。 – CodingGorilla

回答

-2

的事情是,它不會在我對你的問題的理解這種工作方式。

您有列表{「肖恩」,「小熊」,......「喬」,伯大尼'} 所以,如果你檢查,如果喬之後伯大尼,然後禁止他送禮物給貝瑟尼,你也將禁止肖恩送禮物給小熊...... 我認爲你需要的不僅僅是一個單一的列表更來實現這一功能。 也許你可以使用含有包含人列出一個列表, 一行例如 {{ '肖恩'},{ '小熊'},...,{ '喬',伯大尼'}}

希望我理解正確你的問題。

+0

我想你明白我的問題。那叫做二維列表嗎? –

+0

很簡單,只需使用一個'List ',然後使用'String.Split()'來查看每個條目中是否有多個名稱。使用多個列表或嵌套列表會使其不必要地複雜化。 – Tim

+0

@JohnDale你的問題並不表明這種情況。 –

1
class Program 
    { 
     static Dictionary<string, List<string>> Names = new Dictionary<string, List<string>>(); 
     static void Main(string[] args) 
     { 
      StreamReader File = new StreamReader("SSfile.txt"); 
      string line = File.ReadLine(); 
      while (line != null) 
      { 
       Console.WriteLine(line); 
       line = File.ReadLine(); 
       var names = line.Split(" ", StringSplitOptions.RemoveEmptyEntries) 
       Names.Add(names[0], names.Skip(1).ToList()); 
      } 
      Console.ReadKey(); 
     } 

     static bool canGive(giver, givee) 
     { 
      return Names[giver].Any(item => item == givee); 
     } 
    } 
+0

好的答案,雖然'字典'是一個矯枉過正。 'KeyValuePair'集合更適合這種情況。你的答案有O(n)的複雜性,但是如果你用簡單的'List 替換字典,你會得到更好的結果。 –

相關問題