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

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

新規登録して質問してみよう
ただいま回答率
85.35%
RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

配列

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

Q&A

解決済

2回答

3411閲覧

Unityでのソートの際に、複数の変数の配列がソート対象の変更に追従するようにしたいです

sugar_you

総合スコア0

RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

配列

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

0グッド

0クリップ

投稿2020/10/13 10:15

編集2020/10/13 10:17

前提・実現したいこと

UnityでRPGを製作中です。

装備アイテムのソート機能を実装したいです。

装備は配列で登録しており、
装備名[0] (例:ナイフ)
攻撃力[0] (例:4)

装備名[1] (例:こんぼう)
攻撃力[1] (例:6)

装備名[2] (例:ナイフ)
攻撃力[2] (例:3)




といった形で登録しております。(装備名はstring型、攻撃力はint型です)

装備名や攻撃力でソートした際に、攻撃力も同じ配列数でついてくる形にするにはどのように処理すればよいでしょうか?

(ソート後に
装備名[0] (例:ナイフ)
攻撃力[0] (例:4)

装備名[1] (例:ナイフ)
攻撃力[1] (例:3)

装備名[2] (例:こんぼう)
攻撃力[2] (例:6)

となるようにしたいです)

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

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

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

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

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

dodox86

2020/10/14 00:43

攻撃力が3と4と違うもので同じ"ナイフ"と言う名前のものがありますが、これは正しいのでしょうか? 「装備名や攻撃力」でソートとありますが、装備名でソートする場合と、攻撃力でソートする場合の2種類があるということでしょうか。 また、ソートは降順(大きい値順)でしょうか。ソート後の例に、ナイフが4, 3...と降順になっています。
sugar_you

2020/10/14 02:32

>攻撃力が3と4と違うもので同じ"ナイフ"と言う名前のものがありますが、これは正しいのでしょうか? 正しいです。同名の性能違いも存在します。 >「装備名や攻撃力」でソートとありますが、装備名でソートする場合と、攻撃力でソートする場合の2種類があるということでしょうか。 そのとおりです。 >また、ソートは降順(大きい値順)でしょうか。ソート後の例に、ナイフが4, 3...と降順になっています。 降順、昇順が選択できるようにしたいです。
guest

回答2

0

単純な配列ではなく、クラスを作りましょう。

C#

1//武器用クラス(クラス名・変数名は適当) 2[System.Serializable] 3public class Weapon { 4 public string name; //名前 5 public int attack; //攻撃力 6} 7 8//管理用クラス 9public class WeaponManager { 10 //武器リスト(インスペクタから設定想定) 11 [SerializeField] private List<Weapon> weaponList = new List<Weapon>(); 12 13 //ソート 14 void Test() { 15 //攻撃力昇順 16 weaponList.Sort((a, b) => a.attack - b.attack); 17 //攻撃力降順 18 weaponList.Sort((a, b) => b.attack - a.attack); 19 //名前昇順 20 weaponList.Sort((a, b) => string.Compare(a.name, b.name)); 21 //名前降順 22 weaponList.Sort((a, b) => string.Compare(b.name, a.name)); 23 24 //※実行するとweaponListの中身がそのまま並び替えられるので、 25 //元のリストを残しておきたいならソート前に中身をコピーしたリストを作成するといいかもしれません。 26 //コピー方法参考: https://qiita.com/c60evaporator/items/781c98ba355e917ddbc5 27 } 28}

投稿2020/10/14 00:53

sakura_hana

総合スコア11427

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

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

sugar_you

2020/10/14 05:45 編集

クラスでは他の参照に支障がでます……
sakura_hana

2020/10/14 12:45

他の参照を修正できないレベルで開発が進行しているなら仕方ありませんが、C#の基礎的な考え方なので、次回以降はこうすることを検討してみてください。
guest

0

自己解決

Array.Sort(装備名,攻撃力);

だけの話ですね。
降順はArray.Reverseで反転させればいい。

投稿2020/10/14 06:24

sugar_you

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問