2011-12-20 6 views
0

私はこれについてどうなるかわかりません。 「 - 」これで私はその文字列を取り、削除/持っているアイテムのすべてのインスタンスをフィルタリングする必要がC#高度な文字列操作またはLINQ - どのように

A - B, Hello, C - D, World 

:私は、ダイナミックなカンマ区切りの文字列を持っています。だから、所望の結果は次のようになり、新たな文字列を次のようになります。これは、文字列操作を使用して行うことができない場合は今すぐ

Hello, World 

、文字列は、LINQを使用して

IEnumerable<string> 

から来ています。だから、おそらくLINQを使って私の望む結果を得る方法があります。ここで

はコードです:

var apps = lbAppGroup.Items.Cast<ListItem>().Where(i => i.Selected).Select(i => i.Value); 
string selectedAppValues = String.Join(", ", apps.ToArray()); 

これが私の最初の例を返します。

私はC#3.5を使用しています。任意の方向または例は非常に高く評価されるだろう!あなたはこのように選択するために、それを追加することができますいずれか

apps.Where(s => !s.Contains("-")); 

あなたが連鎖することができ、あなたのLINQステートメントよう:

+1

Where節を '.Ihere Chad

答えて

2

ただLINQでそれを行います:

var apps = lbAppGroup.Items.Cast<ListItem>().Where(i => i.Selected && !i.Value.Contains("-")).Select(i => i.Value); 
string selectedAppValues = String.Join(", ", apps.ToArray());

また、あなたは、このような正規表現を使用できます。

Regex re = new Regex("(?<=[,^]\s*)[^-]+(?=[,$])"); 

をしかし、あなただけの文字列があった場合にのみことをするでしょう。あなたは本当に大きな、これは実行しませんコレクションだけでなく、string.JoinためにLINQのすべての方法

lbAppGroup.Items.Cast<ListItem>().Where(i => i.Selected) 
.Where(i => i.Value.Contains("-")) 
.Select(i => i.Value).Aggregate((x, y) => x + ", " + y); 

に行きたい場合は個人的に

+1

+1コメントで私が言ったことはまったく同じです。 – Chad

+0

おかげさまで大変助かりました! – Jared

0

これはダッシュを含まないシーケンス内のすべての文字列を返します

var apps = lbAppGroup.Items.Cast<ListItem>().Where(i => i.Selected).Where(s => !s.Contains("-")).Select(i => i.Value); 

または次の文でそれを使用する:あなたはすでにやっているよう

string selectedAppValues = String.Join(", ", apps.Where(s => !s.Contains("-")).ToArray()); 
0

、私は、拡張メソッド

// takes any IEnumerable, not just strings (like an int array for example) 
public static string Join(this IEnumerable source, string delimiter = ", ") 
{ 
    return string.Join(
      delimiter, 
      source.OfType<object>() 
      .Select(i => i == null ? "null" : i.ToString()).ToArray() 
      ) 
} 

を持っていますしかし、。

0

LINQでのコメントはできませんが、この文字列をどのように操作すればよいか教えてください。

"A - B、ハロー、C - D、世界"

各列はカンマで区切られている場合、各文字列は、文字列のリスト内の項目です。

最初のステップは、各アイテムを解析することです。それぞれの文字を、最初から別々の文字列に追加します。コンマをヒットしたら、この文字列を文字列配列に追加し、文字列をクリアして、次の文字(またはスペースの後の次の文字)に移動します。これと同じように:あなたは文字列のリストを持っていたら

Begin -> "" 
[0] = A -> "A" 
[1] = -> "A " 
[2] = - -> "A -" 
... 
[5] = , -> "A - B" 
list<string>.add("A - B") 

は、あなたがして、リストを反復処理し、

if (list.get(x).contains("-") list.remove(x) 

または何を言います。今、これがすべて設定されていることを

、あなただけのリスト全体のものをオフにハックし、ちょうどその場でそれを行うことができます。 1.「現在」の項目を決定し 2.それが持っている場合 - それには、追加しないでくださいそれを最後の文字列に置き換えます。 3.それ以外の場合は、カンマで区切ります。 4.次の項目に移動し、終了するまで繰り返します。

+0

私はループを書いたり、文字列を分割するものは書いていません。正規表現と文字列ライブラリの関数を書いた人よりも、このようなことはうまくいかないでしょう。 – jwg