C#中索引

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NETTest
{
    /**
     * 索引器在语法上方便您创建客户端应用程序可将其作为数组访问的类、结构或接口。 索引器经常是在主要用于封装内部集合或数组的类型中实现的。
     * 索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。
     * 索引器和数组比较:
     * (1)索引器的索引值(Index)类型不受限制
     * (2)索引器允许重载
     * (3)索引器不是一个变量
     * 索引器和属性的不同点
     * (1)属性以名称来标识,索引器以函数形式标识
     * (2)索引器可以被重载,属性不可以
     * (3)索引器不能声明为static,属性可以
     * 索引器值不属于变量;因此,不能将索引器值作为 ref 或 out 参数进行传递。
     * **/
    public class IndexClass
    {
        private Hashtable name = new Hashtable();

        //1:通过key存取Values
        public string this[int index]
        {
            get { return name[index].ToString(); }
            set { name.Add(index, value); }
        }

        //2:通过Values存取key
        public int this[string aName]
        {
            get
            {
                //Hashtable中实际存放的是DictionaryEntry(字典)类型,如果要遍历一个Hashtable,就需要使用到DictionaryEntry
                foreach (DictionaryEntry d in name)
                {
                    if (d.Value.ToString() == aName)
                    {
                        return Convert.ToInt32(d.Key);
                    }
                }
                return -1;
            }
            set
            {
                name.Add(value, aName);
            }
        }
    }

    //接口,索引
    public interface ISomeInterface
    {
        // Indexer declaration:
        int this[int index]
        {
            get;
            set;
        }
    }

    // Implementing the interface.
    public class IndexerClass : ISomeInterface
    {
        private int[] arr = new int[100];
        public int this[int index]   // indexer declaration
        {
            get
            {
                // The arr object will throw IndexOutOfRange exception.
                return arr[index];
            }
            set
            {
                arr[index] = value;
            }
        }
    }
}
 static void Main(string[] args)
        {
            //第一种索引器的使用
            IndexClass indexer = new IndexClass();
            indexer[1] = "张三";//set访问器的使用
            indexer[2] = "李四";
            Console.WriteLine("编号为1的名字:" + indexer[1]);//get访问器的使用
            Console.WriteLine("编号为2的名字:" + indexer[2]);

            Console.WriteLine();
            //第二种索引器的使用
            Console.WriteLine("张三的编号是:" + indexer["张三"]);//get访问器的使用
            Console.WriteLine("李四的编号是:" + indexer["李四"]);

            indexer["王五"] = 3;//set访问器的使用
            Console.WriteLine("王五的编号是:" + indexer["王五"]);

            Console.WriteLine();
            IndexerClass test = new IndexerClass();
            System.Random rand = new System.Random();
            // Call the indexer to initialize its elements.
            for (int i = 0; i < 10; i++)
            {
                test[i] = rand.Next();
            }
            for (int i = 0; i < 10; i++)
            {
                System.Console.WriteLine("Element #{0} = {1}", i, test[i]);
            }

            Console.ReadLine();
        }
时间: 2025-01-08 10:14:40

C#中索引的相关文章

Handlebars.js循环中索引(@index)使用技巧(访问父级索引)

使用Handlebars.js过程中,难免会使用循环,比如构造数据表格.而使用循环,又经常会用到索引,也就是获取当前循环到第几次了,一般会以这个为序号显示在页面上. Handlebars.js中获取循环索引很简单,只需在循环中使用{{@index}}即可. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <META http-equiv=Content-Type content="text/html; charset=utf-

为何在查询中索引未被使用 (Doc ID 1549181.1)

* 为何在查询中索引未被使用 (Doc ID 1549181.1) To Bottom 文档内容 用途   排错步骤   快速检查   表上是否存在索引?   索引是否应该被使用?   索引本身的问题   索引列或者索引的前置列是否在单表(non-join)查询的 Where 条件中(predicate list)?   索引列是否用在连接谓词中(join predicates)?   索引列在 IN 或者多个 OR 语句中?   索引列是否被函数修改?   隐式类型转换(implicit ty

sql server数据库中索引失效的问题讨论

有关于数据库中索引失效的问题,网上也有相关的讨论.不过他们是针对oracle数据库进行讨论的.那么在sql server数据库中索引什么时候 会失效呢.总结了一下,不过我没有经过测试.没测试就没有发言权,这里仅供自己参考. 首先,所谓失效.并不真的就是这个索引被删除了.而是在这些情况下,DBMS不会检索索引列表了.执行速度和没有这个索引时的速度一样. 但是再执行另外的一条语句.同样索引可以正常起作用.所以索引的失效是针对某条sql语句的,而不是针对索引本身的.那么在哪些情况下, 确切的说是在哪类

MongoDB中索引的创建和使用详解

索引通常能够极大的提高查询的效率.在系统中使用查询时,应该考虑建立相关的索引.在MongoDB中创建索引相对比较容易. mongodb中的索引在概念上和大多数关系型数据库如MySQL是一样的.当你在某种情况下需要在MySQL中建立索引,这样的情景同样适合于MongoDB. 基本操作 索引是一种数据结构,他搜集一个集合中文档特定字段的值.MongoDB的查询优化器能够使用这种数据结构来快速的对集合(collection)中的文档(collection)进行寻找和排序.准确来说,这些索引是通过B-T

SolrCloud中索引数据存储于HDFS

SolrCloud中索引数据存储于HDFS 本人最近使用SolrCloud存储索引日志条件,便于快速索引,因为我的索引条件较多,每天日志记录较大,索引想到将日志存入到HDFS中,下面就说说怎么讲solr的索引条件数据存储到HDFS中. 一.准备工作 Solr环境或SolrCloud集群,如果不会安装可以看一下Solr5.5.4单机部署或者SolrCloud集群部署 HDFS分布式系统环境,如果不会安装的可以看一下Hadoop2.5.0安装部署 本人就以Solr5.5.4+Tomcat8.5.6单

记录数据库中索引失效的问题

昨天碰到一个很有意思的问题,一个sql 语句,加上 SoftUseLine like '%OQC%' 之后,速度就特别慢.去掉该条件之后,速度就快起来了. 查看sql 语句的执行情况,发现加上那个查询条件之后,SoftWareDetailInfo表的逻辑读取变成了1300374 次, 可是这个查询字段明明已经加上Index_SoftWareDetail索引了,怎么会逻辑读取还这么大呢.查看sql profile 的详细信息,发现sql 语句,没有走那个索引. 于是,加上WITH(INDEX(In

mysql 中索引的限制

mysql中索引的限制 在使用索引的同时,还了解MySQL中索引存在的限制,以便在索引应用中尽可能地避开限制所带来的问题.下面列出了目前mysql中与索引使用相关的限制. 1)myisam存储引擎索引键长度的总和不能超过1000字节: 2)blob和text类型的列只能创建前缀索引: 3)mysql目前不支持函数索引: 4)使用不等于(!=或者<>)的时候,msyql无法使用索引: 5)过滤字段使用了函数运算(如abs(column))后,mysql无法使用索引: 6)join语句中join条

T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他

简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索引的概念,需要了解大量原理性的知识,包括B树,堆,数据库页,区,填充因子,碎片,文件组等等一系列相关知识,这些知识写一本小书也不为过.所以本文并不会深入讨论这些主题. 索引是什么 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 精简来说,索引是一种结构.

26 计算用户输入的内容中索引为奇数并且对应的元素为数字的个数的两种方法

#计算用户输入的内容中索引为奇数并且对应的元素为数字的个数第二种方法content = input(">>>")count = 0for i in range(len(content)):#i就是下标,或者说就是索引 if i % 2 == 1 and content[i].isdigit(): count += 1print(count) #计算用户输入的内容中索引为奇数并且对应的元素为数字的个数的第一种方法 li = []res = ' '.join(input(

MySQL数据库中索引原理与数据结构

MySQL中的索引分为3种: 1,主键索引:即用主键当唯一索引 2,常规索引:实现方式为B树和哈希表 3,全文索引:实现原理类似倒排索引,常用来查询字段中包含关键字 下面复习下B-TREE和hash-table 1 B-tree B树可以在O(lgn)的时间内实现许多动态集合操作,除了用在数据库索引上,也被用在磁盘查找上. B树是一种多路查找平衡多叉树,具有以下属性: 1,如果根节点不是叶节点,则其至少有两棵子树. 2.每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <