2011-07-19 10 views
2

そのもの。私は次のコードを得た:リスト内の一部の文字列と一致する<string>別のリスト<string>

foreach (var str in usedCSS) { 
    if (CSS.Any(c => c.IndexOf(str)>0))   
     Response.Write(str + "<br />"); 
    else   
     Response.Write("Could not find: " + str + "<br />"); 
} 

usedCSSを= List<string>

= List<string>

CSSしかし、私はそれを他の方法で回避を必要とするが...

私は var str in usedCSSvar str in CSSになりたいです

usedCSS唯一のCSS名例えばの文字列:.header

CSSは、実際のCSS例えばの文字列が含まれていますbasicly .header {font-size:14px;}

、私は必要なものを使用されているactuallのCSSをプリントアウトすることです。 私は現在持っているコードは正反対ですが、それはcssの名前、 アクロバールCSSを返しません。

+0

これはおそらく私の人生で見た中で最も恐ろしい笑顔です。 (;)) – Mehrdad

+0

笑、あなたが答えるのを妨げるだろうか? – Dementic

+0

笑、私は実際にはわからない。 – Mehrdad

答えて

3

を試してみてください。 FirstOrDefault()は述語の一致が最初に出現したことを検出して返します。見つからない場合はnull(デフォルトではstringの場合)です。それから、CSS接頭辞の各項目を問題のstrに一致させるための文字列メソッドStartsWith()が必要です。

p.s.あなただけが複数の一致を持つことができる場合は、1本のまたは全くマッチを期待し、それらをすべてしたい場合は、上記の作品:

foreach (var str in usedCSS) 
{ 
    foreach(var match in CSS.Where(s => s.StartsWith(str))) 
    { 
     // get the match. 
     Response.Write(match + "<br />"); 
    } 
} 
+0

作品があれば、私はあなたにキスします! – Dementic

+0

Lol、ありがとう? –

+0

私はOPに似たケースがありました。リストはまったく同じではありませんでした。スタックオーバーフローに関する他の答えの多くは、私に大量のダブを与えるだろう。しかし、最初のデフォルトを使用すると、冗談が取り除かれました。優れた反応。ありがとう。 – Prescient

1

は、私はそれはあなたが正しくやろうとしているが何であるかを理解していれば、あなたがこれを行うことが

var R = (from str in CSS from x in usedCSS where str.StartsWith (x) select str).ToList(); 
foreach (var V in R) 
{ 
    Response.Write (V.ToString() + "<br />"); 
} 
+0

ラムダ式に変換できますか?私は 'from'を使って嫌いです。私はそれを理解することはできません8) – Dementic

+0

私はラムダ式に本当に流暢ではありません...申し訳ありません。 – Yahia

+0

笑、私は反対です。他の答えが出てこない場合、私はあなたに正しい答えを与えるでしょう。 – Dementic

0
 List<string> result = CSS.Where(a => usedCSS.Any(b => b.IndexOf(a) >= 0)).ToList(); 
     result.ForEach(a => Console.WriteLine(a)); 

と逆

 List<string> result = usedCSS.Where(a => CSS.Any(b => a.IndexOf(b) >= 0)).ToList(); 
     result.ForEach(a => Console.WriteLine(a)); 

サンプルコードを...

 List<string> CSS = new List<string>() { "hello", "goodbye" }; 
     List<string> usedCSS = new List<string>() { "hello darlin", "when are you available", "hello chief", "what", "when to say goodbye" }; 
     List<string> result = usedCSS.Where(a => CSS.Any(b => a.IndexOf(b) >= 0)).ToList(); 
     result.ForEach(a => Console.WriteLine(a)); 
     Console.ReadLine(); 

結果:

hello darlin 
hello chief 
when to say goodbye 

または

 List<string> CSS = new List<string>() { "hello", "goodbye" }; 
     List<string> usedCSS = new List<string>() { "hello darlin", "when are you available", "hello chief", "what" }; 
     List<string> result = CSS.Where(a => usedCSS.Any(b => b.IndexOf(a) >= 0)).ToList(); 
     result.ForEach(a => Console.WriteLine(a)); 
     Console.ReadLine(); 

結果:ここで

hello 
+0

は機能しません!ソウイ。 – Dementic

+0

私のために働く、私は私のテストケースに入れます.... – deepee1

+0

まあ、もしそれがあった場合dosent仕事を言うだろう...私はあなたのコードを試した後、解決策が必要なので、私は何も印刷されていません。 – Dementic

0

がより "アーカイブ" のソリューションです:

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace ConsoleApplication1 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      List<string> css = new List<string> 
      { 
       ".header {font-size:14px;}", 
       ".foo {dfsfd}", 
       ".foobar", 
       ".wefw" 
      }; 

      List<string> usedCss = new List<string> 
      { 
       ".header", 
       ".foo", 
      }; 

      List<string> list = css.Where(c => usedCss.Any(c.Contains)).ToList(); 

      if (list.Count > 0) 
      { 
       Console.WriteLine("Has found in:"); 
       list.ForEach(Console.WriteLine); 
      } 
      else 
      { 
       usedCss.ForEach(x => Console.WriteLine("Could not find: " + x)); 
      } 

      Console.ReadKey(); 
     } 
    } 
} 

List<string> list = css.Where(c => usedCss.Any(c.Contains)).ToList(); 

あなたはこのテストコードを使用して、確認することができます

'.foo''.foobar'と区別できないことに注意してください。一般的には、もしそれがメートルであれば、より複雑なチェックを正規表現で使うべきです。

関連する問題