文档章节

golang 查找数组中最小数的泛型函数

guonaihong
 guonaihong
发布于 2015/05/31 11:53
字数 285
阅读 909
收藏 4

golang里要实现查找数组最小数的泛型函数,需要用到类型开关。

gol的类型开关写法:

switch v.(type) {
       case int:
       case float64:
       case string:
}

思路就是遍历数组,遇到更小的数保存下来,函数退出返回那个数。

golang代码:

package main

import (
    "fmt"
)

func Minimum(first interface{}, rest ...interface{}) interface{}{
    minimum := first

    for _, v := range rest {
        switch v.(type) {
            case int:
                if v := v.(int); v < minimum.(int) {
                    minimum = v 
                }   
            case float64:
                if v := v.(float64); v < minimum.(float64) {
                    minimum = v 
                }   
            case string:
                if v := v.(string); v < minimum.(string) {
                    minimum = v 
                }   
        }   
    }   
    return minimum
}

func main() {
    i := Minimum(1, 3, 5, 7, 9, 10, -1, 1).(int)
    fmt.Printf("i = %d\n", i)
}


clang:

#include <stdio.h>

int min_int(void *v1, void *v2) {
    return *(int *)v1 > *(int *)v2;
}

int min_double(void *v1, void *v2) {
    return *(double *)v1 > *(double *)v2;
}

void *minimum(void *base, int size, int esize, int (*min_cmp)(void *, void *)) {
    int i;
    void *mini = base;

    for (i = 1; i < size; i++) {
        if (min_cmp(mini, base + i * esize))
            mini = base + i * esize;
    }   
    return mini;
}

#define ARR_LEN(arr) sizeof(arr) / sizeof((arr)[0])
#define ARR_ESIZE(arr) sizeof((arr)[0])

int main() {
    void *min;
    int arr_int[] = {0, 5, 6, 7, 8, 9, -1, 2}; 
    min = minimum(arr_int, ARR_LEN(arr_int), ARR_ESIZE(arr_int), min_int);
    printf("%d\n", *(int *)min);

    double arr_double[] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, -3.14, 99};
    min = minimum(arr_double, ARR_LEN(arr_double), ARR_ESIZE(arr_double), min_double);
    printf("%lf\n", *(double *)min);
    return 0;
}


© 著作权归作者所有

guonaihong

guonaihong

粉丝 6
博文 83
码字总数 27591
作品 1
徐汇
程序员
私信 提问
《Java编程思想》第四版读书笔记 第十六章 数组

16.1 数组为什么特殊 数组与其他种类的容器之间的区别有三方面:效率、类型和保存基本类型的能力。在Java中数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性序...

一万
2016/07/05
113
0
泛型 -- Generics

泛型代码可以让你写出根据自我需求定义、适用于任何类型的,灵活且可重用的函数和类型。它可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码的意图。 泛型是 Swift 强大特征中的其中...

626224816
2014/08/03
0
0
golang读取json格式的天气预报

使用天气预报的接口:http://weather.china.xappengine.com/api?city=南宁 (找了好久才找到一个支持拼音的,不过好像小地方是没数据的) 访问得到json格式压缩的数据,格式化后 { } GO语言内...

Mocos
2013/06/30
2.7K
2
从0到1学习网络安全 【PHP基础-数据类型】

PHP 数据类型 String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。 PHP 字符串 字符串是字符序列,比如 "Hello world...

it阿杰
2018/01/03
0
0
C++泛型线性查找算法——find

C++泛型线性查找算法——find 《泛型编程和STL》笔记及思考。 线性查找可能是最为简单的一类查找算法了。他所作用的数据结构为一维线性的空间。这篇文章主要介绍使用 C++ 实现泛型算法 find...

何必诗债换酒钱
2018/07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。 本篇文章有参考自:https://www...

CREATE_17
昨天
82
0
处理CSV文件中的逗号

我正在寻找有关如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且该值可能带有逗号(例如公司名称)。 我们正在研究的一些想法是:带引号的标识符(值“,”值“,”等)或使用|...

javail
昨天
79
0
如何克隆一个Date对象?

将Date变量分配给另一个变量会将引用复制到同一实例。 这意味着更改一个将更改另一个。 如何实际克隆或复制Date实例? #1楼 简化版: Date.prototype.clone = function () { return new ...

技术盛宴
昨天
73
0
计算一个数的数位之和

计算一个数的数位之和 例如:128 :1+2+8 = 11 public int numSum(int num) { int sum = 0; do { sum += num % 10; } while ((num = num / 10) > 0); return sum;......

SongAlone
昨天
124
0
为什么图片反复压缩后普遍会变绿,而不是其他颜色?

作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的...

shzwork
昨天
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部