質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1761閲覧

【c#】配列の何番目の要素が条件を満たしているのか知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/12/10 10:05

皆さんこんばんは
c#を勉強し始めて間もない者です。
今回は、配列の要素の中から条件をみたしているものがその配列の何番目の要素なのか、そして分かった添え字を代入した配列の作り方を質問させていただきたいです。
もともとは、振り子の周期を測定しようとしておりArduinoのセンサー機器から得られたデータから周期を出そうとしています。数値が295よりも多きものを抜き出すということはできました。しかし、その要素がもともとの配列(ここではVal)のなかで何番目の要素なのかを知りたいのですがうまくいきません。私は、もともとの配列の条件を満たしている要素の添え字を抽出した配列を新たに構成したいと考えています。
(下の例で言うと300を超えている要素の添え字で構成された配列{4,8,12,16,20,25,30}というものを作りたいです。)
皆様、どうかご教授願います。
以下に例として書いてみたコードのほうを載せさせていただきます。

<コード>
//実際はこのような数値が計測されるため例として抜き出して配列Valとして書き出しています。
var Val = new int[] { 20,21,24,324,23,22,21,327,21,21,21,329,21,21,21,323,21,21,21,324,21,21,21,21,326,21,21,21,21,344,,21,21,21,21,21 };

//Valの隣り合う要素の値の差を要素値とする配列 A を作る var A = new int[Val.Length - 1];

      //c配列の要素数は適当です
int[] C = new int[101];
for (int i = 0; i < A.Length; ++i)
{
A[i] = Val[i + 1] - Val[i];
}
//配列Aの要素の中から295より大きいものを配列retに代入する
//ここから下のコードの書き方がわかりません
for( int i = 0; i < A.Length; i++)
{
n = 0;
if(A[i] >= 295)
{
C[n] = i; n = n + 1;
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/12/10 10:15

先のご質問は理解されたのですよね。 [C#での配列について] https://teratail.com/questions/372755 で、なぜ今回このような質問が出てくるのかわかりません。もう少し自分で考えて自分でコード書けるようにならないと、回答をコピペするだけになってしまいますよ。
Zuishin

2021/12/10 10:37

だから List 使えって言われてるのに。
guest

回答1

0

ベストアンサー

sharp

1for (int i = 0; i < A.Length; i++) 2{ 3 n = 0; 4 if (A[i] >= 295) 5 { 6 C[n] = i; n = n + 1; 7 } 8}

nがループ内にあるため、常に0になってしまっています。
次のようにすればどうでしょう?

sharp

1int n = 0; 2 3for (int i = 0; i < A.Length; i++) 4{ 5 if (A[i] >= 295) 6 { 7 C[n] = i; n = n + 1; 8 } 9}

[参考]また、勉強のため次のような書き方もありますのでご参考まで
上記の置き換えになり、結果は同じです。(1行で書けちゃうんですよね・・・)

sharp

1int[] C = A 2 .Select((value, index) => new { Value = value, Index = index }) 3 .Where(n => n.Value >= 295) 4 .Select(n => n.Index) 5 .ToArray();

[参考コードの全体]

sharp

1using System.Linq; 2 3namespace SelectArraySample 4{ 5 6 class Program 7 { 8 static int[] Val = new int[] { 20, 21, 24, 324, 23, 22, 21, 327, 21, 21, 21, 329, 21, 21, 21, 323, 21, 21, 21, 324, 21, 21, 21, 21, 326, 21, 21, 21, 21, 344, 21, 21, 21, 21, 21 }; 9 10 static void Main(string[] args) 11 { 12 int[] A = new int[Val.Length - 1]; 13 14 for (int i = 0; i < A.Length; ++i) 15 { 16 A[i] = Val[i + 1] - Val[i]; 17 } 18 19 int[] C = A 20 .Select((value, index) => new { Value = value, Index = index }) 21 .Where(n => n.Value >= 295) 22 .Select(n => n.Index) 23 .ToArray(); 24 } 25 } 26} 27

投稿2021/12/11 02:09

hidepon4162

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/13 04:53

返信が遅れてしまい申し訳ございません。 回答のみならず、別の方法まで載せていただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問