プログラム言語 リスト・連想é…列

リスト(コレクション)

リストã®åž‹ã«ã¤ã„ã¦ã¯ã€Œãƒ—ログラム言語 ジェãƒãƒªãƒƒã‚¯ã€å‚ç…§

ãƒªã‚¹ãƒˆã®æ“作

åˆæœŸåŒ–

List list = new ArrayList<>();
list.add(1);
list.add(1);
list.add(2);
list.add(3);
list.add(5);

List list = Arrays.asList(1, 1, 2, 3, 5);
è¦ç´ ã®è¿½åŠ ãƒ»å¤‰æ›´ãƒ»å‰Šé™¤ä¸å¯
ArrayListã¨åˆ¥åž‹

List list = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 5));
è¦ç´ ã®è¿½åŠ ãƒ»å¤‰æ›´ãƒ»å‰Šé™¤å¯
ArrayListã¨åŒåž‹

通常
ary = [1, 2, 3]

é…列ã€ç®—術パッケージ
import numpy as np

ary = np.asarray([1, 2, 3])
print(ary) # [1 2 3]

æ•´æ•°
int = np.asarray([1.5, 2.5, 3.5], dtype=np.int32)
print(int) # [1 2 3]

æµ®å‹•å°æ•°ç‚¹æ•°åž‹
float = np.asarray([1.5, 2.5, 3.5], dtype=np.float)
print(float) # [1.5 2.5 3.5]

変æ›
float = int.astype(np.float32)
print(float) # [1. 2. 3.]

è¦ç´ æ•°
print(ary.shape) # (3,)

è¦ç´ ãŒ0ã®ãƒªã‚¹ãƒˆ
ary = np.zeros(10, np.int32)
print(ary) # [0 0 0 0 0 0 0 0 0 0]

ary = np.ones(10, np.int32)
print(ary) # [1 1 1 1 1 1 1 1 1 1]

1未満ã®ä¹±æ•°
ary = np.random.rand()
print(ary) # 0.05840233316803445

1未満ã®ä¹±æ•° & 3è¦ç´ ã®ãƒªã‚¹ãƒˆ
ary = np.random.rand(3)
print(ary) # [0.29455163 0.62542719 0.85194529]

æ–‡å­—åˆ—â†’ãƒªã‚¹ãƒˆå¤‰æ› / 文字列â†ãƒªã‚¹ãƒˆå¤‰æ›

#文字列→é…列
print('Java php python C#'.split())
#['Java', 'php', 'python', 'C#']

print('Java, php, python, C#'.split())
#['Java,', 'php,', 'python,', 'C#']

print('Java, php, python, C#'.split(','))
#['Java', ' php', ' python', ' C#']

print('Java,php,python,C#'.split(','))
#['Java', 'php', 'python', 'C#']

リストã®ã‚³ãƒ”ー

ary1 = ['php','Java','Python']
ary2 = ary1 #å‚照元をコピー
ary2[1] = 'C#' #å‚照元を変更

print(ary1) #['php', 'C#', 'Python']
print(ary2) #['php', 'C#', 'Python']

ary1 = ['php','Java','Python']
ary2 = ary1.copy() #値をコピー
ary2[1] = 'C#'

print(ary1) # ['php', 'Java', 'Python']
print(ary2) # ['php', 'C#', 'Python']

ary1 = {'php':'CakePHP3', 'Java':'SpringBoot', 'Python':'Django'}
ary2 = ary1 #å‚照元をコピー
ary2['php'] = 'Larabel' #å‚照元を変更

print(ary1) # {'php': 'Larabel', 'Java': 'SpringBoot', 'Python': 'Django'}
print(ary2) # {'php': 'Larabel', 'Java': 'SpringBoot', 'Python': 'Django'}

ary1 = {'php':'CakePHP3', 'Java':'SpringBoot', 'Python':'Django'}
ary2 = ary1.copy() #値をコピー
ary2['php'] = 'Larabel'

print(ary1) # {'php': 'CakePHP3', 'Java': 'SpringBoot', 'Python': 'Django'}
print(ary2) # {'php': 'Larabel', 'Java': 'SpringBoot', 'Python': 'Django'}

ary1 = [['php', 'Java', 'Python'],['CakePHP3', 'SpringBoot' ,'Django']]
ary2 = ary1 #å‚照元をコピー
ary2[1][0] = 'Larabel'

print(ary1) # [['php', 'Java', 'Python'], ['Larabel', 'SpringBoot', 'Django']]
print(ary2) # [['php', 'Java', 'Python'], ['Larabel', 'SpringBoot', 'Django']]

ary1 = [['php', 'Java', 'Python'],['CakePHP3', 'SpringBoot' ,'Django']]
ary2 = ary1.copy() #é…列ã®ä¸­ã®é…列をコピー → 失敗
ary2[1][0] = 'Larabel'

print(ary1) # [['php', 'Java', 'Python'], ['Larabel', 'SpringBoot', 'Django']]
print(ary2) # [['php', 'Java', 'Python'], ['Larabel', 'SpringBoot', 'Django']]

import copy

ary1 = [['php', 'Java', 'Python'],['CakePHP3', 'SpringBoot' ,'Django']]
ary2 = copy.deepcopy(ary1) #é…列ã®ä¸­ã®é…列をコピー → æˆåŠŸ
ary2[1][0] = 'Larabel'

print(ary1) # [['php', 'Java', 'Python'], ['CakePHP3', 'SpringBoot', 'Django']]
print(ary2) # [['php', 'Java', 'Python'], ['Larabel', 'SpringBoot', 'Django']]

多次元

通常
ary = [[1,2,3], [4,5,6]]
print(ary)
# [[1 2 3] [4 5 6]]

2ã¤ç›®ã®é…列ã®1ã¤ç›®ã®è¦ç´ ã‚’変更
ary[1][0] = 10
print(ary[1][0]) #10

é…列ã€ç®—術パッケージ
import numpy as np

多次元é…列
ary = np.asarray([[1,2,3], [4,5,6]])
print(ary)
# [[1 2 3] [4 5 6]]

è¦ç´ æ•°
print(ary.shape)
# (2, 3)

1未満ã®ä¹±æ•°
ary = np.random.rand()
print(ary) # 0.05840233316803445

1未満ã®ä¹±æ•° & 3è¦ç´ ã®é…列
ary = np.random.rand(3)
print(ary) # [0.29455163 0.62542719 0.85194529]

0以上1未満ã®ä¹±æ•° & 2次元3è¦ç´ ã®é…列
ary = np.random.rand(2, 3)
print(ary) # [[0.40308448 0.73320688 0.52510381][0.983294  0.10888467 0.02262024]]

空リスト判定

List<String> list = new ArrayList<>();
boolean bool1 = CollectionUtils.isEmpty(list);
true
boolean bool2 = CollectionUtils.isNotEmpty(list);
false

è¦ç´ ã®æ“作

追加・削除

List myList = new List<int> {10,20,30,40,50};
var myList = new List {10,20,30,40,50}; ã‚‚å¯

追加
myList.Add(6);

int[] myInt = { 1, 2, 3 };
var list = new List<string>() { @"A", @"B" };
list.AddRange(myInt.Select(n => n.ToString()));
list.AddRange(Enumerable.Range(start: 4, count: 10).Select(n => n.ToString()));

çµåˆã—ã¦è¿½åŠ 
int[] ary1 = { 1, 2, 3 };
int[] ary2 = { 4, 5, 6 };
ary1 = ary1.Concat(ary2).ToArray();

削除
myList.Remove(10);
myList.Remove(myList[3]);
myList.RemoveAt(1);

åˆæœŸåŒ–
myList.Clear();

#include <vector>

int main(array<System::String ^> ^args)
{
  ベクター(コレクション)
  std::vector<int> myVector;
  イテレーター:ä½ç½®æƒ…å ±
  std::vector<int>::iterator myBegin;
  std::vector<int>::iterator myEnd;
  
  myVector.push_back(10); // 末尾ã«è¿½åŠ 
  myVector.push_back(20); // 末尾ã«è¿½åŠ 
  myVector.push_back(30); // 末尾ã«è¿½åŠ 
  myVector.pop_back(); // 末尾を削除
  
  Console::WriteLine(myVector[0]);
  Console::WriteLine(myVector.at(0));
  // → 10
  
  // 先頭è¦ç´ ã®å–å¾—(削除ã¯ã—ãªã„)
  int elm = myVector.front();
  // elm:10
  // 末尾è¦ç´ ã®å–å¾—(削除ã¯ã—ãªã„)
  int elm = myVector.back();
  // elm:30
  
  myBegin = myVector.begin();  //最åˆã®è¦ç´ ä½ç½®
  myEnd = myVector.end();    //最後ã®è¦ç´ ä½ç½®
  myFunc(myBegin, myEnd);
  
  return 0;
}

void myFunc(std::vector<int>::iterator prmBegin, std::vector<int>::iterator prmEnd)
{

  // ä½ç½®æƒ…報:先頭~末尾ã¾ã§å…¨ä»¶Loop

  for (std::vector<int>::iterator tmp = prmBegin; tmp != prmEnd; tmp++)
  {
    Console::WriteLine(*tmp);
  }
  
  ↓もåŒã˜
  
  // ä½ç½®æƒ…報:先頭~末尾ã¾ã§å…¨ä»¶Loop

  for (; prmBegin != prmEnd; ++prmBegin)
  {
    // ãƒã‚¤ãƒ³ã‚¿ã‚’用ã„ã¦é éš”æ“ä½œ
    Console::WriteLine(*prmBegin);
  }
}

Dim myList As New List(Of Integer)({10, 20, 30, 40, 50})

myList.Add(15)
myList.Remove(20)
myList.Remove(myList(2))
myList.RemoveAt(1)
myList.Sort()
myList.Clear()

IF クラス é †åº é‡è¤‡ 追加 削除 å‚ç…§
Collection List ArrayList æ ¼ç´é † 〇 add remove
SortedList 整列 〇 add remove
Set HashSet é †ä¸åŒ × add remove
TreeSet 整列 × add remove
Queue ArrayDeque FIFO 〇 offer
offerLast
poll peek
Deque ArrayDeque LIFO 〇 offerFirst poll peek
Map Map HashMap é †ä¸åŒ キー:×
値:〇
put remove get(キー)
TreeMap 整列 キー:×
値:〇
put remove get(キー)

ArrayList
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("2");
list.add("3");
for (String key : list){
 System.out.println(key);
}
→1 2 2 3

追加
ArrayList array = new ArrayList<>();
ArrayList<Object> array = new ArrayList<Object>();ã¨åŒã˜

array.add(5);
⇒ array {5}

array.add("5");
⇒ array {5,"5"}

array.add('5');
⇒ array {5,"5",'5'}

指定ã®ä½ç½®ã«è¿½åŠ 
array.add(2,5);
⇒ array {5,"5",5,'5'}

先頭ã‹ã‚‰åˆè‡´ã—ãŸè¦ç´ ã‚’上書ã
array.set(0, 50);
⇒ array {50,"5",5,'5'}

先頭ã‹ã‚‰åˆè‡´ã—ãŸè¦ç´ ã‚’削除
array.remove("5");
⇒ array {50,5,'5'}

æ¡ä»¶ã«åˆè‡´ã—ãŸè¦ç´ ã‚’削除
List list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
list.removeIf(i -> i.equals(5));
list.toString();
[1, 2, 3, 4, 6, 7, 8, 9, 10]

for (int i=0; i<array.size(); i++){
 String s = array.get(i);
}
for (Iterator i=array.iterator(); i.hasNext(); ){
 String s = i.next().toString();
}

HashSet
HashSet<String> hashSet = new HashSet<>();
hashSet.addAll(list);
for (String key : hashSet){
 System.out.println(key);
}
→2 1 3

TreeSet
TreeSet<String> treeSet = new TreeSet<>();
treeSet .addAll(list);
for (String key : treeSet){
 System.out.println(key);
}
→1 2 3

Queue
Queue<String> queue = new ArrayDeque<>();
queue.addAll(list);
System.out.println(queue.poll());
System.out.println(queue.poll());
queue.offer("2");
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
→1 2 2 3 2

Deque
Deque<String> stack = new ArrayDeque<>();
stack.offerFirst("1");
stack.offerFirst("2");
stack.offerFirst("2");
stack.offerFirst("3");
System.out.println(stack.poll());
System.out.println(stack.poll());
stack.offerFirst("2");
System.out.println(stack.poll());
System.out.println(stack.poll());
System.out.println(stack.poll());
→3 2 2 2 1

# åˆæœŸåŒ–
ary = ['php', 'python', 'Java']

# 末尾ã«è¿½åŠ 
ary += ['C#']
print(ary)
→['php', 'python', 'Java', 'C#']

# 追加
ary = []
ary.append('php')
ary.append('python')
ary.append('Java')
ary.append('C#')
print(ary)
→['php', 'python', 'Java', 'C#']

# インデックスを指定ã—ã¦è¿½åŠ 
ary = []
ary.insert(0, 'php') #先頭ã«è¿½åŠ 
ary.insert(1, 'python') #2番目ã«è¿½åŠ 
ary.insert(5, 'Java') #末尾ã«è¿½åŠ 
print(ary)
→['php', 'python', 'Java']

削除
ary.remove('php')
del ary[1] #インデックスを指定
del ary[-1] #末尾ã®è¦ç´ ã‚’指定

perl_push_pop

push
é…åˆ—ã®æœ€å¾Œã«è¦ç´ ã‚’追加ã™ã‚‹
my @x;
push(@x, 1);
my @y = (2,3);
push(@x, @y);
push(@x, 4, 5); #連続ã§ã„ãã¤ã§ã‚‚追加å¯
⇒ @x : 1 2 3 4 5

pop
é…åˆ—ã®æœ€å¾Œã®è¦ç´ ã‚’å–り除ã
my @before = (1,2,3,4,5);
pop(@before);
⇒ @before : 1 2 3 4

my $after = pop(@before);
⇒ $after : 4
⇒ @before : 1 2 3

shift
é…åˆ—ã®æœ€åˆã®è¦ç´ ã‚’å–り除ã
my @before = (1,2,3,4,5);
shift(@before);
⇒ @before : 2 3 4 5

my $after = shift(@before);
⇒ $after : 2
⇒ @before : 3 4 5

unshift
先頭ã¸è¦ç´ è¿½åŠ 
my @x;
my @y = (1,2,3);
unshift(@x, @y);
unshift(@x, 0, -1);
⇒ @x : -1 0 1 2 3

splice
é…列ã‹ã‚‰æŒ‡å®šã®è¦ç´ ã‚’ã€æŒ‡å®šã®å€‹æ•°åˆ†å–り除ã
splice(é…列 , é–‹å§‹Index , 個数);

my @x = (1,2,3,4,5);
splice(@x,0,2);
⇒ @x : 3 4 5

reverse
é…列ã®è¦ç´ ã‚’逆順ã«ã™ã‚‹

my @before = (1,2,3,4,5);
my @after = reverse(@before);
⇒ @before : 1 2 3 4 5
⇒ @after : 5 4 3 2 1

sort
é…列ã®è¦ç´ ã‚’ソートã™ã‚‹(数値é™å®š)

my @before = (2,1,4,3,5);

昇順
my @after = sort{$a <=> $b}(@before);
⇒ @before : 2,1,4,3,5
⇒ @after : 1 2 3 4 5

é™é †
my @after = sort{$b <=> $a}(@before);
⇒ @before : 2,1,4,3,5
⇒ @after : 5 4 3 2 1

ç½®æ›

List<Integer> list = new ArrayList<>( Arrays.asList(1,2,3,5,7) );
list.replaceAll(i -> i * 10);
list.toString():[10, 20, 30, 50, 70]

比較

Comparable Comparator
機能 自身ã¨ä»–者ã¨ã®å¤§å°æ¯”較 2オブジェクトã®å¤§å°æ¯”較
Package java.lang.Comparable java.util.Comparator
メソッド compareTo ・compare
・equals
・reversed
クラス ・Integer
・String等
・TreeSet
・TreeMap等

package java.lang;
public interface Comparable<T> {
 public int compareTo(T o);
}

例
public final class Integer extends Number implements Comparable<Integer> {
 public int compareTo(Integer anotherInteger) {
  return compare(this.value, anotherInteger.value);
 }
 public static int compare(int x, int y) {
  return (x < y) ? -1 : ((x == y) ? 0 : 1);
 }

}

package java.util;
public interface Comparator<T> {
 int compare(T o1, T o2);
 boolean equals(Object obj);
 default Comparator<T> reversed() {
  return Collections.reverseOrder(this);
 }
}

検索

List<String> list = Arrays.asList("Java", "PHP", "C#", "Python");
int found = Collections.binarySearch(list, "Java");
0

int found = Collections.binarySearch(list, "Java");
-5

「é…列/検索ã€å‚ç…§
計算

é…列ã€ç®—術パッケージ
import numpy as np

ary = np.asarray([1, 2, 3])

# åˆè¨ˆ
print(np.sum(ary))

# å¹³å‡
print(np.mean(ary))

# 最大値
print(np.max(ary))

# 最å°å€¤
print(np.min(ary))

# 標準åå·®
print(np.std(ary))

ä¸¦ã³æ›¿ãˆ(自然順åº)

自然順åºï¼šæ•°å­—ã€ã‚¢ãƒ«ãƒ•ァベット順等

myList.Sort();

string[] ary = new string[] { "b", "aaaaa", "cc" };
Array.Sort(ary, (x, y) => x.Length.CompareTo(y.Length));
※x, y ã«ã¯é•·ã•を比較ã™ã‚‹ç‚ºã®å„è¦ç´ ãŒå…¥ã‚Šã€2ã¤ã®è¦ç´ ã®é•·ã•比較を行ã†

DateTime[] ary = new DateTime[]
{
 new DateTime(year: 2010, month: 1, day: 1),
 new DateTime(year: 2001, month: 1, day: 1),
 new DateTime(year: 2005, month: 1, day: 1),
 new DateTime(year: 2003, month: 1, day: 1)
};
Array.Sort(ary, (x, y) => Math.Sign(x.Ticks – y.Ticks));
var newary1 = ary.OrderBy(n => n);

List<String> list = new ArrayList<>();
list.add("20");
list.add("30");
list.add("10");
list:20 30 10

Collections.sort(list);
list:10 20 30

Collections.reverse(list);
list:30 20 10

ä¸¦ã³æ›¿ãˆ(定義)

public class Employee{
 private String _name;
 private Integer _id;
 public Employee(String name, Integer id){
  this._name = name;
  this._id = id;
 }
 public Integer getId(){
  return this._id;
 }
 public String getName(){
  return this._name;
 }
}

※Integer.class
public int compareTo(Integer anotherInteger) {
 return compare(this.value, anotherInteger.value);
}
public static int compare(int x, int y) {
 return (x < y) ? -1 : ((x == y) ? 0 : 1);
}

import java.util.Comparator;

public class MyRule implements Comparator<Employee>{
 public int compare(Employee obj1, Employee obj2){
  return obj1.getId().compareTo(obj2.getId());
 }
}

※java.util.Collections.class
public class Collections {
 public static void sort(List list1) {
  list1.sort(null);
 }
 public static void sort(List list1, Comparator comparator) {
  list1.sort(comparator);
 }
}

public class StudyMain {

 public static void main(String[] args) {
  Employee e1 = new Employee("JavaScript", 20);
  Employee e2 = new Employee("php", 25);
  Employee e3 = new Employee("Java", 10);

  List<Employee> list = new ArrayList<>();
  list.add(e1);
  list.add(e2);
  list.add(e3);
  System.out.println("ArrayListã®æ ¼ç´é †");
  print(list);
  →20 JavaScript 25 php 10 Java

  System.out.println("MyRole.ID順");
  Collections.sort(list, new MyRule());
  print(list);
  →10 Java 20 JavaScript 25 php
 }

 private static void print(List<Employee> list){
  for (Employee obj : list){
   System.out.println(obj.getId() + " " + obj.getName());
  }
 }
}

連想é…列(ãƒãƒƒã‚·ãƒ¥ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªã€ãƒžãƒƒãƒ—)

Dictionary<string, string> dic = new Dictionary<int, string>();
dic.Add(1, @"西宮");
dic.Add(2, @"神戸");
dic.Add(3, @"芦屋");

Dictionary<string, string> myDic = new Dictionary<string, string>
{
  {"1Top","大久ä¿"},
  {"å·¦Wing","香å·"},
  {"å³Wing","岡崎"},
  {"Top下","本田"}
};

foreach (var element in myDic){
  string pos = element.Key;
  string name = element.Value;
};

foreach (string myKey in myDic.Keys)
{
  string pos = myKey;
  string name = myDic[pos];
};

string ret;
myDic.TryGetValue(key: 3, value: out ret);
key:3ãŒç„¡ã‘れã°nullãŒè¿”ã‚‹

ãƒã‚¤ãƒ³ã‚¿(リファレンス/デリファレンス)を使用ã—ãŸé…列ã®åˆ©ç”¨ã«ã¤ã„ã¦ã¯ã€Œãƒ—ログラム言語 ãƒã‚¤ãƒ³ã‚¿ / 連想é…列(ãƒãƒƒã‚·ãƒ¥)ã®ãƒã‚¤ãƒ³ã‚¿ã€å‚ç…§

自動整列リスト
SortedList<int, string> mySorted = new SortedList<int, string>
{
  {11,"大久ä¿"},
  {10,"香å·"},
  {9,"岡崎"},
  {4,"本田"}
};

HashMap
Map<String, String> hashMap = new HashMap<String, String>();
hashMap.put("B", "Java");
hashMap.put("C", "php");
hashMap.put("A", "JavaScript");
for (Map.Entry<String, String> entry : hashMap.entrySet()){
 System.out.println(entry);
}
→B=Java C=php A=JavaScript

TreeMap
Map<String, String> treeMap = new TreeMap<String, String>();
treeMap.put("B", "Java");
treeMap.put("C", "php");
treeMap.put("A", "JavaScript");
for (Map.Entry<String, String> entry : treeMap.entrySet()){
 System.out.println(entry);
}
→A=JavaScript B=Java C=php

マップã®åˆæœŸåŒ–(匿å関数)
※lassファイルãŒ2ã¤ã§ãã¦ã—ã¾ã†ç‚ºéžæŽ¨å¥¨
public static final HashMap<String, String> pg = new HashMap<String, String>(){
 {
  put("01", "Java");
  put("02", "C#");
  put("03", "php");
  put("04", "JavaScript");
 }
};

マップã®åˆæœŸåŒ–(イニシャライザ)
private static Map<String, Double> exp;
static {
 exp = new HashMap<>();
 exp.put("VB6", 2D);
 exp.put("VB.Net", 4D);
 exp.put("Java", 3D);
 exp.put("C#", 2D);
 exp.put("PHP", 1D);
}

è¦ç´ ã®è¿½åŠ 
exp.put("Python", 0.5);
exp.toString();
{C#=2.0, Java=3.0, VB.Net=4.0, PHP=1.0, VB6=2.0, Python=0.5}

è¦ç´ ã®å‰Šé™¤
exp.remove("VB6");
exp.remove("VB.Net");

exp.toString();
{C#=2.0, Java=3.0, PHP=1.0, Python=0.5}

è¦ç´ ã®å–å¾—
exp.get("Java"));
3.0

è¦ç´ ã®ä¸Šæ›¸ã
exp.put("Java", 4D);
キーãŒé‡è¤‡ã—ã¦ã„ã‚‹å ´åˆ

exp.get("Java");
4.0

è¦ç´ æ•°
exp.size());
4

キーã®å­˜åœ¨ãƒã‚§ãƒƒã‚¯
exp.containsKey("Java");
true

exp.containsKey("Ruby");
false

値ã®å­˜åœ¨ãƒã‚§ãƒƒã‚¯
exp.containsValue(3.0);
true

exp.containsValue(10.0);
false

キーã®Loop
for (String lungage : exp.keySet()) {
 lungage;
 C# Java PHP Python
}

値ã®Loop
for (Double year : exp.values()) {
 year;
 2.0 4.0 1.0 0.5
}

è¦ç´ ã®Loop
for (Entry map : exp.entrySet()) {
 map.getKey();
 C# Java PHP Python
 map.getValue();
 2.0 4.0 1.0 0.5
}

指定ã—ãŸå€¤ãŒç„¡ã„å ´åˆã®ãƒ‡ãƒ•ォルト値を指定ã—ã¦å–å¾—
List<String> language = Arrays.asList("Java", "C#", "PHP", "C#", "Python", "Java");

Map<String, Integer> counter = new HashMap<>();
language.forEach(s -> {
 counterã«ã‚­ãƒ¼ãŒç„¡ã„(==null)å ´åˆã¯0ã€ã‚れã°ã‚­ãƒ¼ã«å¯¾å¿œã™ã‚‹å€¤ã‚’å–å¾—
 Integer i = counter.getOrDefault(s, 0);

 従æ¥ã®æ›¸ãæ–¹
 Integer i = counter.get(s) == null ? 0 : counter.get(s);

 counter.put(s, i+1);
});

counter.forEach((key, value) -> {
 System.out.println(key + ":" + value);
});
C#:2 Java:2 PHP:1 Python:1

Dim myDic As New Dictionary(Of String, String)() From { _
  {“key1”, “value1”}, _
  {“key3”, “value3”}, _
  {“key2”, “value2”}, _
  {“key4”, “value4”}
}

For Each element In myDic
  Dim key = element.Key
  Dim value As String = element.Value
Next element

For Each element As String In myDic.Keys
  Dim key As String = element
  Dim value As String = myDic(key)
Next element

自動整列リスト
Dim mySorted As New SortedList(Of String, String)() From { _
  {"key1", "value1"}, _
  {"key3", "value3"}, _
  {"key2", "value2"}, _
  {"key4", "value4"}
}

※VBAã®å ´åˆå‚照設定ã§ã€ŒMicrosoft Scripting Runtimeã€ã‚’å‚照追加
Dim dic As New Scripting.Dictionary

dic.Add "key1", "item1"
dic.Add "key2", "item2"
dic.Add "key3", "item3"

Dim key as Variant
For Each key In dic
  debug.print dic.item(key)
  →item1 item2 item3
Next key

キー全削除
dic.RemoveAll

①var変数 = new Object;
※変数[キー] = 値;

var TestArray = new Object();

TestArray["key1"] = value1;
TestArray["key2"] = value2;
TestArray["key3"] = function(){ alert("value3ã§ã™ã€‚"); };

alert(TestArray["key1"]);
var strfunc = "key2"
alert(TestArray[strfunc]);

for (var i = 1; i <= 3; ++i) {
  alert["key" + i];
}

②var変数 = {キー:値 , キー:値, ・・・}

var TestArray = {
  key1:value1,
  key2:value2,
  key3:function(){ alert("value3ã§ã™ã€‚");}
}

$list = [
 'php' => 'CakePHP',
 'java' => 'SpringBoot',
 'JavaScript' => 'node.js',
];

print $list['php'];
→'CakePHP'

追加
$list += [
 'php' => 'Laravel',
];

# åˆæœŸåŒ–
dic = {
  'php':'CakePHP3',
  'python':'Django',
  'Java':'Spring-boot',
}

# 追加
dic['C#'] = '.NetCore',

# 削除
del dic['C#']

# 指定ã®å€¤
print(dic.get('php')) # CakePHP3
print(dic.get('python')) # None
# キーãŒç„¡ã„å ´åˆã®å€¤ã‚‚指定
print(dic.get('python', '?')) # ?

# キー
print(dic.keys())
# dict_keys(['php', 'python', 'Java'])

# 値
print(dic.values())
# dict_values(['CakePHP3', 'Django', 'Spring-boot'])

# キーã¨å€¤
print(dic.items())
# dict_items([('php', 'CakePHP3'), ('python', 'Django'), ('Java', 'Spring-boot')])

for key in dic.keys():
  print(key)
  # php
  # python
  # Java

for value in dic.values():
  print(value)
  # CakePHP3
  # Django
  # Spring-boot

for item in dic.items():
  print(item)
  # ('php', 'CakePHP3')
  # ('python', 'Django')
  # ('Java', 'Spring-boot')

for key, value in dic.items():
  print(key, value)
  # php CakePHP3
  # python Django
  # Java Spring-boot

# 存在ãƒã‚§ãƒƒã‚¯
print('php' in dic.keys()) # True
print('CakePHP3' in dic.values()) # True
print('CakePHP3' in dic.items()) # False
print(('php', 'CakePHP3') in dic.items()) # True

# KeyãŒå­˜åœ¨ã—ãªã„å ´åˆã®ã¿è¿½åŠ 
dic.setdefault('php', 'Laravel') # phpキーãŒå­˜åœ¨ã™ã‚‹ã®ã§è¿½åŠ ã•れãªã„
dic.setdefault('C#', '.Net') # C#キーãŒå­˜åœ¨ã—ãªã„ã®ã§è¿½åŠ ã•れる
print(dic)
# {'php': 'CakePHP3', 'python': 'Django', 'Java': 'Spring-boot', 'C#': '.Net'}

my %profile;
$profile{"name"} = "yone"
$profile{"age"} = 35

print "$profile{'name'}\\n";
⇒yone

ãƒãƒƒã‚·ãƒ¥ã¸ã®ä¸€æ‹¬ä»£å…¥
my %profile = (
  'name' => 'yone',
  'age' => 35
);
åˆã¯
my %profile = ("name","yone","age",35)

keys
※連想é…列ã‹ã‚‰ã‚­ãƒ¼ã‚’å–å¾—
my $key = keys(%profile);

for my $key ( keys(%profile) ){
  $keyã«ã¯keyã ã‘ãŒå…¥ã‚‹
}

values
※連想é…列ã‹ã‚‰å€¤ã‚’å–å¾—
my $value = values(%profile);

for my $value ( values(%ary) ){
  $valueã«ã¯valueã ã‘ãŒå…¥ã‚‹
}

delete
※連想é…列ã‹ã‚‰æŒ‡å®šã®ã‚­ãƒ¼ã‚’削除
delete($profile{"age"});

追加
$profile{新key} = ~;

exists
if ( exists($profile{キー}) ) {
  ~
}

ãƒãƒƒã‚·ãƒ¥xを全件Loop。キー⇒nameã€å€¤â‡’valueã¸æ ¼ç´ã€‚
while ( (my $name, my $value) = each(%x)){
  print "$name = $value";
}
※name,value ã®å¤‰æ•°åã¯å¤‰æ›´å¯èƒ½

ä»–

é…列・リスト変æ›

List<string> oldList = new List<string>() { "A", "B", "C" };

string[] array = oldList.ToArray();
array[0]:"A" / array[1]:"B" / array[2]:"C"

int[] ary = Enumerable.Range(start: 1, count: 26).ToArray();
int[] ary = Enumerable.Repeat(element: -1, count: 100).ToArray();

List<string> newList = array.ToList();
newList.AddRange(array); ã‚‚å¯

String[] ary = {"Java", "php", "JavaSrcipt"};
List<String> list = Arrays.asList(ary);
→Java php JavaScript

list.set(2, "C#");
→Java php C#
list.remove(2); →実行時エラー(å¤‰æ›æ™‚ã¯ã‚µã‚¤ã‚ºå›ºå®š)

$ary = [
  'key1' => 'java',
  'key2' => 'php',
  'key3' => 'C#',
];

$ret = array_values($ary);
$ret → ['java', 'php', 'C#'];

before = ['php', 'Java', 'Python']

# タプル → リスト
after = list(before)
after[0] = 'C#' # OK
print(after) # ['C#', 'Java', 'Python']

# リスト → タプル
before = ['php', 'Java', 'Python']
after = tuple(before)
after[0] = 'C#' # エラー

Iterator/IEnumerableインターフェイス

List<String> list = new ArrayList<>(Arrays.asList("Java", "PHP", "C#", "Python"));

↓ for (int i=0; i<10; i++) { ~ } ã®ï¼“ã¤ç›®ã®å‡¦ç†ã‚’çœç•¥ã—ãŸå½¢
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
 String element = iterator.next();

 Iteratorã¯è¦ç´ ã‚’変更ã§ãã‚‹
 if (element == "C#") iterator.remove();
}

System.out.println(list.toString());
[Java, PHP, Python]

é…列ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«foreach()æ§‹æ–‡ã§ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ç‚ºã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス。
IEnumerableインターフェイスã¯GetEnumerator()メソッドを実装ã—ã¦ãŠã‚Šã€
ã“れを実行ã™ã‚‹ã¨IEnumrableインターフェイスを返ã™ã€‚
é…列ã€ãƒªã‚¹ãƒˆã¯æœ€åˆã‹ã‚‰ã®ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを継承ã—ã¦ã„る。

int[] myArray = new int[] { 1,3,5,7 };

//é…列myArrayã¯IEnumerableを継承ã—ã¦ã„ã‚‹ã®ã§ã€GetEnumerator()を実行ã§ãる。
//IEnumerableインターフェイスを返ã™ã®ã§myEã«æ ¼ç´ã§ãã‚‹
IEnumerator myE = myArray.GetEnumerator();
while(myE.MoveNext())
{
  int val = (int)myE.Current;
  Console.WriteLine(val);
  ⇒ 1 3 5 7
}

// IEnumerableを継承ã„れã°â†“ ã®æ§˜ã«æ›¸ã‘ã‚‹
foreach(int n in myArray)
{
  Console.WriteLine(n);
  ⇒ 1 3 5 7
}

// ãƒªã‚¹ãƒˆã‚‚åŒæ§˜ã«IEnumerableを継承ã—ã¦ã„ã‚‹ã®ã§foreach()æ§‹æ–‡ã®ä½¿ç”¨ãŒå¯èƒ½
ArrayList myList = new ArrayList() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
foreach(int i in myList)
{
  Console.WriteLine(i);
  ⇒ 1 2 3 4 5 6 7 8 9 10
}

「IEnumerableインターフェイス継承クラスã®è‡ªä½œã€å‚ç…§

Follow me!