int[] a = new int[] { 1, 2, 3 }; int[] b = new int[] { 6, 5, 4 };
ここから b - a をすることで新しい配列 {5,3,1} を作りたいのですが、
LINQ を使ってそれをやろうとすると、aの要素数 * bの要素数 の計算量で処理してしまします。
何かいい方法はないでしょうか。or おとなしくループ文使え?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
LINQを使わなければならないという制約があるのですね?
回答3件
0
Zipが使えないのであればこんなのはどうでしょうか。
C#
1var c = b.Select((value, index) => value - a[index]).ToArray();
要素数が一致していることが条件ですが。
投稿2017/05/31 05:33
総合スコア559
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/31 05:46
わざわざ別解答ありがとうございます!!
2017/05/31 05:49 編集
要素数が一致ていうより、
b.Length<=a.Length
じゃないかなって。
0
ベストアンサー
こんなんでいかがでしょ?
csharp
1 2using System; 3using System.Linq; 4 5namespace ConsoleApp8 6{ 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 int[] a = new int[] { 1, 2, 3 }; 12 int[] b = new int[] { 6, 5, 4 }; 13 14 int[] diff = a.Zip(b, (x, y) => y - x).ToArray(); 15 } 16 } 17} 18 19
ココより追記
無いなら作ろうって感じでひとつ。
csharp
1 2using System; 3using System.Collections.Generic; 4using System.Linq; 5 6namespace ConsoleApp8 7{ 8 static class MyExtend 9 { 10 public static IEnumerable<TResult> MyZip<T1, T2, TResult >(this IEnumerable<T1> first, IEnumerable<T2> second,Func<T1,T2,TResult> resultSelector) 11 { 12 if(first==null) throw new ArgumentNullException("first"); 13 if(second==null) throw new ArgumentNullException("second"); 14 if(resultSelector==null)throw new ArgumentNullException("resultSelector"); 15 16 17 using (var f = first.GetEnumerator()) 18 using (var s=second.GetEnumerator()) 19 { 20 while (f.MoveNext()&&s.MoveNext()) 21 { 22 yield return resultSelector(f.Current, s.Current); 23 } 24 } 25 26 } 27 } 28 29 class Program 30 { 31 static void Main(string[] args) 32 { 33 int[] a = new int[] { 1, 2, 3 }; 34 int[] b = new int[] { 6, 5, 4 ,5,6}; 35 int[] diff = a.MyZip(b, (x, y) => y - x).ToArray(); 36 37 } 38 } 39} 40
投稿2017/05/31 04:36
編集2017/05/31 05:08総合スコア260
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/31 04:40
ありがとうございましたが、こちらの説明不足が1点・・・
.NET3.5なのでZipが使えないのです。
別解はないでしょうか
2017/05/31 05:08
追記しました~
2017/05/31 05:12
すげぇ・・・
2017/05/31 05:35
:)
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。