2

任意の列の任意の単語から始めてキーワードを検索したい。

たとえば、displayedCustomers オブジェクトには、Sameer Singh という Name が含まれています。

だから私の検索変数

searchOption="eer" //it should not search, 
searchOption="ingh" //it should not search,
searchOption="Sa" //it should search,
searchOption="Si" //it should search,
searchOption="ameer" //it should not search 

以前はこのコードを単語全体に使用していましたが、文字列のスペースを分割して開始要素と比較する方法がわかりません。効率的な方法でこれを行うのを手伝ってください

4

3 に答える 3

3
// Split the word by space
var split = str.Split(" ");
// Check if firstname or lastname starts with searchString
var found = split[0].StartsWith(searchString) || split[1].StartsWith(searchString);

その人がミドルネームも持っているかどうかわからず、それについてもテストしたい場合:

var searchString = "Sam";
var split = customerName.Split(" ");
var found = false;
foreach(var str in split)
{
    found == found || str.StartsWith(searchString);
    if(found)
      break;
}

これをメソッドにまとめます。

public bool NameStartsWith(string name,string searchStr)
{
    var split = name.Split(" ");
    foreach(var str in split)
    {
        if(str.StartsWith(searchString))
          return true;
    }
    return false;
}

次のように使用します。

var matches = NameStartsWith("Sameer Singh","Sa"); // true
var matches = NameStartsWith("Sameer Singh","Si"); // true
var matches = NameStartsWith("Sameer Singh","S"); // true
var matches = NameStartsWith("Bobby Singer Bobberson","Sing"); // true
var matches = NameStartsWith("Sameer Singh","meer"); // false
于 2012-10-31T08:44:12.533 に答える
2

String.StartsWith次のものと一緒に使用する必要がありますString.Split

public bool IsMatching(string Name, string SearchOption)
{
    foreach (string s in Name.Split(' '))
    {
       if s.StartsWith(SearchOption)
          return true;
    }

    return false;
}

// use it like:
if IsMatching("Sameer Singh", "Sa")
{
    // ...
于 2012-10-31T08:46:49.647 に答える
2

使用できますString.StartsWith

string name = "Sameer Singh";
string searchOption = "eer";
bool nameStartsWith = name.StartsWith(searchOption);

Console.Write("{0} {1} {2}"
                , name
                , nameStartsWith ? "starts with" : "starts not with"
                , searchOption);

デモ: http://ideone.com/mEh5Q1

レコード内のすべての単語またはすべての列に対してこれを行うことができます。

例(仮定DataRow):

bool rowContains = row.ItemArray.Any(o => string.Format("{0}", o).StartsWith(searchOption));

仮定String[]

bool arrContains = array.Any(str => str.StartsWith(searchOption));

仮定String

bool nameContains = name.Split().Any(w => w.StartsWith(searchOption));
于 2012-10-31T08:42:27.597 に答える