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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

4回答

3006閲覧

List<>で特定の要素以外を削除したい

milkwalking

総合スコア60

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/05/07 07:49

前提・実現したいこと

List<>で特定の要素以外を削除したいです
Listの中が10個だとして 2番目の要素数以外を削除する方法はございますか?
範囲を指定して要素を削除するには、RemoveRangeメソッドなんですが、
たとえばListの要素が100個あって50番目以外削除!
など可能でしょうか?
お手数ですがご教授お願いいたします。

補足情報(FW/ツールのバージョンなど)

言語はC#
Windows Formを使用してアプリを作成中です
SQLサーバー
Microsoft SQL Server 2014 - 12.0.2269.0 (X64)
Express Edition (64-bit) on Windows NT 6.3 <X64> (Build 17763: )

VisualStudio2017という環境です。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/05/07 08:10

SQL Server からデータを取得して List<T> 型のオブジェクトを作るのですか? であれば、SQL Server から取得するときに不要なレコードは取得しないように考えるべきと思いますが、そういう話ではない? 何にせよ、List<T> オブジェクトの「何番目」というのはピンと来ません。主キーなどで指定することは考えないのですか?
guest

回答4

0

Listを特定のものを取り出したListで上書きすればよろしかと

C#

1List<int> list = new List<int> { 1,2,3,4,5,6,7,8,9,10}; 2list = list.Skip(1).Take(1).ToList();

とか

C#

1List<int> list = new List<int> { 1,2,3,4,5,6,7,8,9,10}; 2list = list.Where(a => a % 2 == 0).ToList();

みたいな感じで

投稿2019/05/07 08:08

YAmaGNZ

総合スコア10242

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

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

milkwalking

2019/05/07 09:07

ありがとうございます。すごい、上書きですか、、今後も参考になるご意見ありがとうございます。;;
guest

0

リストの n 番目以降を削除

C#

1list.RemoveRange(n, list.Count - n);

リストの n 番目以前を削除

C#

1list.RemoveRange(0, n - 1);

これを順に行えばいいわけですが、それよりも n 番目の要素を取り出して新しいリストに入れる方が早いと思います。

投稿2019/05/07 08:04

Zuishin

総合スコア28660

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

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

milkwalking

2019/05/07 09:08

ありがとうございます。今回の内容以外でも使用できそうな内容ありがとうございます。 n 番目の要素を取り出して新しいリストに入れる方が早いと思います。 ←おっしゃるとおりです、、、ありがとうございます。;;
guest

0

特定の要素が必ず一つでかつLINQをつかえるバージョンなら以下の方法はどうでしょうか?

C#

1 List<string> source = new List<string>() { "1", "2", "3", "4", "5" }; 2 var result = source.ElementAt(3).ToList();

以上の3の部分に取得したいインデックスを入れてやることで、リストをとれます。

投稿2019/05/07 08:22

Yuki_S

総合スコア356

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

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

milkwalking

2019/05/08 00:35

なるほどです。リンクの使い方がまだあまりイメージできてないんですが、一度使用してみます。 わざわざありがとうございます。^^
Yuki_S

2019/05/08 00:47

すごく簡単に言うと数えられる型になっているデータに対してSQL文を使ってデータを処理できるものです。 データの中から何番目の要素を取得する『ElementAt』とその結果をリスト化する『ToList』を使っています。これで新たに任意の要素だけを抜き出した新たなリストが完成するので、上書きしていただくなりしてもらえばいいかと思います。 ちなみにYAmaGNZさんがやっているのもLINQの機能を利用したものですね。
milkwalking

2019/05/08 03:51

わかりやすい説明ありがとうございます。気持ちは高評価*100くらいです;;
guest

0

ベストアンサー

インデックスの指定で、1個だけ残すなら

C#

1int pickup = 50;//残すインデックス番号 2 3for(int i = list.count - 1; i >= 0; i--) 4{ 5 if(i != pickup) 6 { 7 list.RemoveAt(i); 8 } 9}

これでテストしてみてください。

投稿2019/05/07 08:19

k.matsuda

総合スコア293

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

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

milkwalking

2019/05/07 09:06

ありがとうございます。for文と組み合わせるとたしかにすごくシンプルで残すインデックスもわかりやすいです・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問