2012年11月29日木曜日

開発環境

『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487311-294-7)の 第8章(配列)10.9(練習問題)問題10-3を解いてみる。

その他参考書籍

問題10-3.

コード

using System;
using System.Collections.Generic;

class Dog
{
    private int weight;
    private string name;
    public Dog(int weight, string name)
    {
        this.weight = weight;
        this.name = name;
    }
    public int Weight
    {
        get { return weight; }
        set { weight = value; }
    }
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}
class Tester
{
    public void Run()
    {
        Dog milo = new Dog(26, "Milo");
        Dog frisky = new Dog(10, "Frisky");
        Dog laika = new Dog(50, "Laika");
        Dog[] dogs = { milo, frisky, laika };
        string[][] awards = new string[dogs.Length][];
        awards[0] = new string[3];
        awards[1] = new string[1];
        awards[2] = new string[2];
        awards[0][0] = "award1";
        awards[0][1] = "award2";
        awards[0][2] = "award3";
        awards[1][0] = "award4";
        awards[2][0] = "award5";
        awards[2][1] = "award6";
        for (int i = 0; i < dogs.Length; i++)
        {
            Console.WriteLine("Name:{0} Weight:{1}の獲得した賞一覧", dogs[i].Name, dogs[i].Weight);
            for (int j = 0; j < awards[i].Length; j++)
            {
                Console.WriteLine(awards[i][j]);
            }
        }
        // 本書には登場してないけどディクショナリーのほうが適してるような気がしたので
        Console.WriteLine("ディクショナリーを使った場合");
        Dictionary<Dog, string[]> awardDict = new Dictionary<Dog, string[]>();
        awardDict.Add(dogs[0], new string[] { "award1", "award2", "award3" });
        awardDict.Add(dogs[1], new string[] { "award4" });
        awardDict.Add(dogs[2], new string[] { "award5", "award6" });
        foreach (Dog dog in dogs)
        {
            Console.WriteLine("Name:{0} Weight:{1}の獲得した賞一覧", dog.Name, dog.Weight);
            foreach (string award in awardDict[dog])
            {
                Console.WriteLine(award);
            }
        }
    }
    static void Main()
    {
        Tester t = new Tester();
        t.Run();
    }
}

入出力結果(Console Window)

Name:Milo Weight:26の獲得した賞一覧
award1
award2
award3
Name:Frisky Weight:10の獲得した賞一覧
award4
Name:Laika Weight:50の獲得した賞一覧
award5
award6
ディクショナリーを使った場合
Name:Milo Weight:26の獲得した賞一覧
award1
award2
award3
Name:Frisky Weight:10の獲得した賞一覧
award4
Name:Laika Weight:50の獲得した賞一覧
award5
award6
続行するには何かキーを押してください . . .

ちなみにJavaScriptの場合。

コード(TextWrangler)

var result = "";
var Dog = function(weight, name){
  var weight = weight;
  var name = name;
  this.get_weight = function(){
    return weight;
  };
  this.set_weight = function(value){
    weight = value;
  };
  this.get_name = function(){
    return name;
  };
  this.set_name = function(value){
    name = value;
  };
};
var milo = new Dog(26, "Milo");
var laika = new Dog(10, "Laika");
var frisky = new Dog(50, "Frisky");
var dogs = [milo, laika, frisky];
var awards = [["award1"], ["award2", "award3", "award4"], ["award5", "award6"]];
for(var i = 0; i < dogs.length; i++){
  result += "Name:" + dogs[i].get_name() + " Weight:" + dogs[i].get_weight() + "の獲得した賞一覧\n";
  for(var j = 0; j < awards[i].length; j++){
    result += awards[i][j] + "\n";
  }
}
$('#pre0').text(result);



pythonの場合。

sample.py

コード(TextWrangler)

#!/usr/bin/env python3.3
# -*- coding: utf-8 -*-

class Dog:
    # pythonではprivateは作れない
    # 先頭に下線を付けておく
    def __init__(self, weight, name):
        self._weight = weight
        self._name = name
    
    # プロパティっぽいものを名前を動詞にして定義
    def get_weight(self):
        return self._weight
    
    def set_weight(self, weight):
        self._weight = weight
    
    def get_name(self):
        return self._name
    
    def set_name(self, name):
        self._name = name
    
    def __str__(self):
        return "Name:{0} Weight:{1}".format(self._name, self._weight)

milo = Dog(26, "Milo")
frisky = Dog(10, "Frisky")
laika= Dog(50, "Laika")
dogs = [milo, frisky, laika]
awards = [["award1","award2","award3"],
          ["award4"],
          ["award5", "award6"]]

i = 0
for dog in dogs:
    print("Name:{0} Weight:{1}の獲得した賞一覧".format(
      dog.get_name(), dog.get_weight()))
    for x in awards[i]:
        print(x)
    i += 1

print("ディクショナリーを使用")
award_dict = {milo:["award1","award2","award3"],
              frisky:["award4"],
              laika:["award5", "award6"]}
for dog, awards in award_dict.items():
    print("Name:{0} Weight:{1}の獲得した賞一覧".format(
      dog.get_name(), dog.get_weight()))
    for award in awards:
        print(award)

入出力結果(Terminal)

$ ./sample.py
Name:Milo Weight:26の獲得した賞一覧
award1
award2
award3
Name:Frisky Weight:10の獲得した賞一覧
award4
Name:Laika Weight:50の獲得した賞一覧
award5
award6
ディクショナリーを使用
Name:Frisky Weight:10の獲得した賞一覧
award4
Name:Milo Weight:26の獲得した賞一覧
award1
award2
award3
Name:Laika Weight:50の獲得した賞一覧
award5
award6
$

0 コメント:

コメントを投稿