Programming」カテゴリーアーカイブ

プログラミング全般に関するカテゴリーです。

UnityでInput.GetKeyを使った操作

Unityでキーボード・ゲームパッドを使ってキャラクターを操作したい場合、

if (Input.GetKey("forward")) {
  transform.position += Vector3.forward * Time.deltaTime;
}

のような感じでスクリプトを書くと思います。

ここで使う"forward"とかの文字列は

[Edit] » [Project Settings]

にある「Input」の項目から設定できるそうです。

文字列を変更したり、感度を設定したりもできるので、入力関係で細かく設定したい場合は試してみてください。

C#のLINQで最小値の要素を取り出す方法

C#のLINQで最小値の要素を取り出す方法をいくつか調べてみました。

Aggregateを使う場合

using System;
using System.Collections.Generic;
using System.Linq;

public class Example1
{
  struct Example
  {
    public string name;
    public int value;
  }

  static public void Main ()
  {
    List list = new List<Example> {
      new Example { name = "aaa", value = 321 },
      new Example { name = "bbb", value = 432 },
      new Example { name = "ccc", value = 123 }
    };

    Example e = list.Aggregate((a, b) => a.value < b.value ? a : b);
    Console.WriteLine("{0}: {1}", e.name, e.value);
  }
}

実行結果

ccc: 123

OrderByとFirstを使う場合

using System;
using System.Collections.Generic;
using System.Linq;

public class Example2
{
  struct Example
  {
    public string name;
    public int value;
  }

  static public void Main ()
  {
    List list = new List<Example> {
      new Example { name = "aaa", value = 321 },
      new Example { name = "bbb", value = 432 },
      new Example { name = "ccc", value = 123 }
    };

    Example e = list.OrderBy(e => e.value).First();
    Console.WriteLine("{0}: {1}", e.name, e.value);
  }
}

実行結果

ccc: 123

リンク

Enumerable.Aggregate Method (System.Linq) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.aggregate?view=netframework-4.7.2

C#でリストをソートする方法

C#でリストをソートしたい場合はLINQのOrderByを使うと簡単にできるようです。

using System;
using System.Collections.Generic;
using System.Linq;

public class Example1
{
  static public void Main ()
  {
    List list = new List<:int> { 321, 432, 123 };
    list = list.OrderBy(i => i).ToList();
    foreach(int i in list) {
      Console.WriteLine(i);
    }
  }
}

実行結果

123
321
432

構造体の場合も同じような感じでできます。

using System;
using System.Collections.Generic;
using System.Linq;

public class Example2
{
  struct Example
  {
    public string name;
    public int value;
  }

  static public void Main ()
  {
    List list = new List<Example> {
      new Example { name = "aaa", value = 321 },
      new Example { name = "bbb", value = 432 },
      new Example { name = "ccc", value = 123 }
    };

    list = list.OrderBy(e => e.value).ToList();
    foreach(Example e in list) {
      Console.WriteLine("{0}: {1}", e.name, e.value);
    }
  }
}

実行結果

ccc: 123
aaa: 321
bbb: 432

リンク

Enumerable.OrderBy Method (System.Linq) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.orderby?view=netframework-4.7.2