2017-10-30 17 views
0

linqを作成して、C#4.0でターゲット要素の最も近いインデックスを見つけることは可能ですか? 例、I "宛先" は7,9で見出される配列C#Linqターゲット要素の最も近いインデックス

string[] array=new string[] 
{"","","source","","source2","","","destination","source3","destination"}; 

を有する、2に "先" の最寄り指数( "ソース")は7であるべきではなく、9

条件は、追加するように編集

int index(int sourceIndex,string[] array,string destination) 
{ 
    int temp=sourceIndex; 
    while(temp<array.Length) 
    { 
     if(array[sourceIndex]==destination) 
      return sourceIndex; 
     temp++; 
    } 
    return -1; 
} 

であれば、私が使用して知っている現在のソリューション: 私は順方向に増やすためには、事前

で おかげ先を見つける必要がありますあなたは試合の多くを期待していない場合
+0

結果に 'source'の役割は何ですか?とにかく、あなたにコードを書くように私たちに求めています。通常、SOはコード作成サービスを提供しません。これを丁寧な思い出として考えてください –

+0

本当にLinqを使用する必要がありますか? –

+0

"source3"に最も近い "目的地"を探していたら好きでしょうか? –

答えて

4

実際に配列を持っている場合は、Linqを使用する必要はありません。

これを行うためにはるかに簡単になります:次に

int startIndex = 2; 
int nearest = Array.IndexOf(array, "destination", startIndex+1); 

nearestは、あなたが探している結果が含まれている、またはします-1 "destination"が見つからない場合。

注:これはあなたの声明の中であなたが望むものと仮定した最も近い順方向を見つけます:"ソースインデックスは既知であり、順方向で最も近いです。 "

また、startIndex+1を使用したのは、最初の位置から検索を開始する必要がないためです。

+0

OPは、 indexは 'source'のインデックスの後になければなりません。ソースの前に1つ、後ろに1つの宛先がある場合はどうなりますか? –

+1

@TimSchmelter私は彼がコメントで言ったと信じています - "順方向に最も近い" –

+0

方法はLinqより速いのですか?私はデータテーブルの中に約50個のデータを計算し、新しい列を作成して更新する状況があります。ありがとう –

1

最も効率的な解決策ではない必ずしも、それが動作するはずです:sourcedestination

string[] array = new string[] {"","","source","","source2","","","destination","source3","destination"}; 
var withIndex = array.Select((Value, Index) => new { Index, Value }); 
var result = 
    (from dest in withIndex.Where(_ => _.Value == "destination") 
    from source in withIndex.Where(_ => _.Value == "source") 
    let dif = dest.Index - source.Index 
    orderby dif 
    select dest.Index) 
    .FirstOrDefault(); 

私たち最初の出現と我々最小の違いを見つけます。

1

あなた本当にはこのためにLINQを使用したい場合は(あなたが本当に配列をIEnumerableを持っていないと言う)、あなたはこのようにそれを行うことができます。

​​

あなたは配列を持っている場合 - 「ドンください。これをして、Matthew Watsonの答えを使用してください。

関連する問題