精华内容
下载资源
问答
  • 对象索引与数组集合 设置和目标 假设我们有一个大的文本文档,并且有很多我们要为其解析文档的关键字。 我们不在乎关键字出现多少次,我们只是在乎它是否被使用过。 当我们找到一个关键字时,我们需要记录该...

    js查询对象集合返回索引

    设置和目标 (The Setup & Goal)

    Let's say that we have one large text document and we have a a bunch of keywords that we want to parse the document for.  We don't care how many times times the keyword appears -- we just care that it's been used.  When we find a keyword, we need to record that keyword been found so that we may check at a later time.

    假设我们有一个大的文本文档,并且有很多我们要为其解析文档的关键字。 我们不在乎关键字出现多少次,我们只是在乎它是否被使用过。 当我们找到一个关键字时,我们需要记录该关键字已被找到,以便我们稍后再检查。

    低效的方法:数组收集和搜索 (Inefficient Method:  Array Collection and Search)

    The first method to record that a keyword has been found is by pushing the keyword into one array:

    记录已找到关键字的第一种方法是将关键字推入一个数组中:

    
    //Assume an array called "foundKeywords" was defined above
    if(shouldSave(keyword)) {
    	foundKeywords.push(keyword);
    }
    
    
    

    At the end of the document search, we'd end up with an array like:

    在文档搜索结束时,我们将得到一个类似以下的数组:

    
    //the foundKeywords array looks like:
    //['keyword1','keyword2','keyword2',...]
    
    
    

    When it comes to checking this array for the existence of a given keyword, this method will prove inefficient.  Why?  Because we'd need to loop through the array and search until we found the given keyword (if ever).  Those are a lot of "wasted" or fruitless cycles, even if we break the loop when the keyword was found.  Inefficient is the only word to describe this process.

    当检查此数组中是否存在给定关键字时,该方法将被证明效率不高。 为什么? 因为我们需要遍历数组并搜索,直到找到给定的关键字(如果有的话)。 即使我们在找到关键字时中断了循环,这些循环还是很多“浪费”或徒劳的循环。 低效率是描述此过程的唯一词。

    高效方法:带有索引的对象 (The Efficient Method:  Object with Index)

    The fastest method of checking a storing keywords for later reference is by object (in JavaScript) or associative array (in PHP).  Instead of adding the keyword to an array, we add the keyword as an index to a master object, giving the value as 1:

    检查存储关键字以供以后参考的最快方法是按对象(在JavaScript中)或关联数组(在PHP中)。 我们没有将关键字添加到数组中,而是将关键字添加为主对象的索引,其值为1:

    
    //Assume an object {} called "foundKeywords" was defined above
    if(shouldSave(keyword)) {
    	foundKeywords[keyword] = 1;
    }
    
    
    

    Why is this faster?  No wasted cycles looking blindly through an array.  The check is quick and simple:

    为什么这样更快? 没有浪费的周期盲目地查看阵列。 检查快速简单:

    
    if(foundKeywords[keyword]) { //FOUND!
    	//do something
    }
    
    
    

    It's either an index or it's not!  In PHP, we'd save the keyword to an associative array:

    它要么是索引,要么不是! 在PHP中,我们将关键字保存到关联数组中:

    
    //Assume an array called "$found_keywords" was defined above
    if(shouldSave($keyword)) {
    	$found_keywords[$keyword] = 1;
    }
    
    //Later: checking if the keyword was there...
    if($found_keywords[$keyword]) { //or array_key_exists($keyword,$found_keywords)
    	//FOUND!
    }
    
    
    

    In a word...awesome.  Not only fast but simple!

    一句话...很棒。 不仅快速而且简单!

    I cannot provide a benchmark because the speed of execution depends on how large the keyword array is.  Suffice to say, for the sake of simplicity and speed, using an object with keyword index is definitely the way to go!

    我无法提供基准,因为执行速度取决于关键字数组的大小。 可以说,为了简单和快速,使用带有关键字索引的对象绝对是必经之路!

    翻译自: https://davidwalsh.name/object-array-index

    js查询对象集合返回索引

    展开全文
  • 创建对象索引 window.indexedDB=window.indexedDB || window.webkitIndexedDB|| window.mozIndexedDB||window.msIndexedDB; window.IDBTransaction=window.IDBTransaction||window.webkitIDBTransact
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>创建对象索引</title>
        <script>
            window.indexedDB=window.indexedDB || window.webkitIndexedDB|| window.mozIndexedDB||window.msIndexedDB;
            window.IDBTransaction=window.IDBTransaction||window.webkitIDBTransaction||window.msIDBTransaction;
            window.IDBKeyRange=window.IDBKeyRange||window.webkitIDBKeyRange||window.msIDBKeyRange;
            window.IDBCursor=window.IDBCursor||window.webkitIDBCursor||window.msIDBCursor;
            function createObjectStore() {
                var dbName='indexedDBTest';
                var dbVersion=20170914;
                var idb;
                var dbConnect=indexedDB.open(dbName,dbVersion);
                dbConnect.onsuccess=function (e) {
                    idb=e.target.result;
                    alert("OK");
                };
                dbConnect.οnerrοr=function () {
                    alert("error");
                };
                //当前版本高于上一版本才能执行这句话
                dbConnect.onupgradeneeded=function (e) {
                    idb=e.target.result;
                    var tx=e.target.transaction;
                    var name='newUsers';
                    //keypath是主键,在一个对象仓库中只能有一个主键,但是主键是可以重复的,
                    //keypath指定每一条记录使用那一属性值作为主键
                    var OptionalParameters={
                        keyPath:'userId',
                        autoIncrement:false  //是否为自增主键值,如果这里设置为false,那么需要显式添加主键值。
                    }
                    //创建对象仓库
                    var store=idb.createObjectStore(name,OptionalParameters); //返回一个IDBObject对象,创建成功的对象仓库
                    alert("createObjectStore OK!")
                    var name='userNameIndex';
                    var keyPath='userName';
                    var OptionalParameters={
                        unique:false, //同一个对象仓库中两个数据的索引不能相同
                        multiEntry:false// false只能讲数组整体添加到索引  true索引值为一个数组,可将每一个元素添加到索引
                    }
                    var idx=store.createIndex(name,keyPath,OptionalParameters);//索引名字,对数据仓库中对象那个属性创建索引,
                    alert("index OK");
                };
    
    
            }
        </script>
    </head>
    <body>
    <button οnclick="createObjectStore()">创建数据库对象</button>
    </body>
    </html>

     在这里解释一下索引的multiEntry属性值

    当我们有一个对象

    {id:300,name:'lilei',sex:'m',like:['football','basketball','jump']}

    在like属性中,疾苦的是一个数组,如果在关系型数据库中,需要另外建一张表,在indexedDB中,不许要另外建立数据仓库,直接设置属性存储即可

    如果将multiEntry属性设置为true,我们对football,basketball,jump进行索引,都可以找到这条记录。而设置为false,则需要对:['football','basketball','jump']进行索引才可以搜索到。


    下一篇开始进行增删改查的操作。

    展开全文
  • Python语言Pandas库的DataFrames数据类型的索引写法比较多,既提供了方便也容易出错。一般的Python书籍上对...先生成一个DataFrame对象为例: df=pd.DataFrame(np.random.rand(4,4), index=list('abcd'), columns...

    Python语言Pandas库的DataFrames数据类型的索引写法比较多,既提供了方便也容易出错。一般的Python书籍上对Pandas索引都有介绍,本文总结一些个人体会,大体分为用中括号索引和用loc/iloc[]索引。

    先生成一个DataFrame对象为例:

    df=pd.DataFrame(np.random.rand(4,4), index=list('abcd'), columns=list('ABCD'))

      A B C D
    a 0.959245 0.552285 0.265993 0.249411
    b 0.743880 0.582683 0.310940 0.675503
    c 0.644287 0.796247 0.202314 0.232712
    d 0.149495 0.570265 0.095389 0.029824

    1. 用中括号的索引

    在用中括号索引时最容易犯错的是混淆了行索引和列索引。基本原则如下:

    (1)单值索引只能索引列
    df['A']是正确的写法,等同于df.A。如果想索引某一行,不能写成df['a']或df['a',:],否则会报错。但可以改用df[df.index=='a']或者df.loc['a']的形式。当需要创建一列时只能用df['列名']的形式。

    (2)列表索引也只能索引列

    如果想同时索引多列,可以写成df[['A','B']],记住有两层中括号,不能少一层中括号。如果写成df['A','B']会报错,因为逗号被解释成了维度之间的分隔符。这里行索引只有'a',而没有'A',而且要表示'a'行'B'列应该用df.loc['a','B'],不能少了loc。列表索引可以改变索引列的顺序,例如写成df[['C','B','A']]将按C、BA的顺序显示,这叫花式索引。花式索引也可以写成对象属性的形式,[[df.C, df.B, df.A]]也是正确的。

    (3)切片只能索引多行
    切片索引写成df['a':'c']或df[:2]表示索引a到c三行,但不能写成df['A':'C']或df[:,'A':'C']来索引三列。这点跟numpy的array不同,如果df是ndarray类型的,可以用df[:, 1:3]来切片第1~2列。要想切片多列可以写成df.loc[:,'A':'C'],但这里不能少了loc和:,,否则也报错。另外,切片只能用中括号或loc索引,而不能写成对象属性的形式,df.loc[:, df.A:df.C]也会报错。
     

    2. 用loc/iloc[]的索引

    上面说了中括号不能对单个行进行索引,而用loc/iloc就解决了这个问题,例如df.loc['B']或df.iloc[2],所以要想索引某一行只能用loc/iloc的形式。由于loc可以索引单个行,为了不引起混淆,索引单个列时必须在前面加上符号“:,”,例如df.loc[:,'A']表示索引A列,如果写成df.loc['A']就会报错,因为Notebook会将df.loc['A']解读为df的A行而实际上df并没有A行。同样,可以用iloc[]来索引一个元素或切片,例如df.iloc[2][3]跟df.iloc[2,3]是等价的,都得到0.232712。df.iloc[2][3]相当于先从df中取出df.iloc[2]这一行,再从这行中取出第3个数。同理,df.iloc[2][1:3]表示第2行的1到2切片。但博主不建议用两个方括号iloc[][]的写法,有时程序会出意外错误。

     

    3. 关于布尔索引

    (1)布尔条件索引既可以索引行又可以索引列,既可以用于中括号索引又可以用于loc/iloc索引。但我建议尽量用loc索引,尤其是对列索引操作时不容易出错,用iloc或直接用方括号索引有时会出现未知错误。如果逻辑表达式是关于变量(列)取值的,布尔索引返回的是行数据,例如写成df.loc[关于列的条件]返回的是行数据。如果逻辑表达式是关于行索引取值的,例如写成df.loc[关于行的条件],则返回的是列数据,例如df.loc[:, df.loc['c']>0.1]。另外还需注意df.loc[df['A']>0.1]中内层的df不能漏了,如写成df[['A']>0.1]或df['A'>0.1]系统只会把'A'当成是一个字符而报错,系统不知道A是指df的一列。还有一个原因,是内侧用于逻辑判断的表跟外侧被索引的表可以不相同,即df1.loc[df2['A']>0.1]的写法,假定df1和df2不是同一个表,这里[df2['A']>0.1]返回一个df2中为True的元素位置的索引列表,然后在df1中按照同样的位置把行取出来。因此用于逻辑判断的字段就必须带上表名,否则不知道是指哪个表里的字段。如果只需要显示A列数据,不能写成df.A[df>0.1],而应该写成df.A[df.A>0.1]。

    (2)当逻辑表达式是关于列名的,布尔索引可以用于对列索引,例如df.iloc[:, df.columns!='B']或df.loc[:, df.columns!='B']都能执行,但此处不能少了loc和iloc,否则也报错。总之凡是把行索引写成“:,”再写列的选取条件的形式只能用在loc/iloc格式。

    (3)如果要用布尔关系将多个条件组合起来,要给每个条件加小括号,例如df.loc[(df['A']>0.7) & (df['B']<0.5) & (df['C']>0.6)],漏写小括号也会出错。注意这里的运算符是位运算符&,而不是布尔运算符and,后者也会出错。如果需要返回整个矩阵,只能用中括号索引,而不能用loc/iloc[]。例如返回df中大于0.1的值应当写成df[df>0.1],而不能写成df.loc[df>0.1]
     

    展开全文
  • 此外,支持RMI的对象,必须支持序列化以及对象索引。序列化接口定义如下: public interface CommaSerialize { public abstract void toSerialize(CommaString writer);//序列化 public abstract void ...

            利用java中的map数据结构,可以很方便的实现对象的索引。此外,支持RMI的对象,必须支持序列化以及对象索引。序列化接口定义如下:

    public interface CommaSerialize {	
    	public abstract void toSerialize(CommaString writer);//序列化
    	public abstract void deSerialize(CommaString srcString);//反序列化
    }
    
    其中CommaString是一种序列化后的字符串。定义稍后讲述。

    支持RMI的对象必须继承下面这个类:

    public abstract class CallBackManager implements CommaSerialize{
    	
    	//记录回调信息
    	protected final static HashMap<String,CallBackManager> remoteObjMaps=new HashMap<String, CallBackManager>();
    	
    	/**
    	 * 将节点放入管理器中
    	 * @param key 节点id
    	 * @param node 节点的引用
    	 */
    	public final static void pushNode(String key,CallBackManager node)
    	{
    		remoteObjMaps.put(key, node);				
    	}
    	protected abstract CommaString call(String functionName,CommaString args);
    	public abstract String getObjID();
    }
            其中,getObjID用于返回对象的id,用该id值可以在虚拟机中索引到该对象,当然,在对象构建时要求对象必须调用CallBackManager::pushNode函数讲自己放入对象管理器中以便索引。当然,必须实现call接口,以支持方法回调。call方法中functionName是指想调用的方法的名称,args是CommaString类型的参数,call方法返回的是CommaString类型的参数。

    任何一个类只要继承CallBackManager,就可以被RMI。

            那么如何RMI呢?假如远方虚拟机想调用本地对象a的fun方法,那么远方虚拟机必须提供对象a的id,同时提供fun的方法名functionName,以及序列化后的参数args。在本地的server线程收到以上数据后,由于remoteObjMaps是static,所以可以根据对象id找到相应的对象,然后调用该对象的call方法,最后将call方法的返回值序列化并返回给远程虚拟机即可。

    展开全文
  • 空间索引(Spatial Index)是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构 ,其中包含空间对象的概要信息,如对象的标识、外接矩形及指向空间对象实体的指针。(不知所云,...
  • Pandas GroupBy对象 索引与迭代

    万次阅读 2017-06-08 11:42:10
    GroupBy对象是一个迭代对象,每次迭代结果是一个元组,元组的第一个元素是该组的名称(就是groupby的列的元素名称),第二个元素是该组的具体信息,是一个数据框,索引是以前的数据框的总索引 for name, group ...
  • 本文介绍 如何编写表达式语句块 操作“数组与索引器”,比如如何获取或设置数组元素 由或者如何设置索引器元素 然后打印其输出值  OK...那么我们先看看如何从一个数组元素中获取其值,从本文开始将不会在编写...
  • 之前想把索引功能集成到对象池中 但是主要因为涉及到TTree的结点申请,结点申请用到内存池又涉及到多线程加锁的问题,而最理想的是一个线程一个内存池,不用加锁 仔细考虑了下发现集成进去反而不是很灵活 那么...
  • 原理:swiper的current属性自动记录当前轮播对象索引,默认值为0,每次轮播切换,current值也会对应改变,且会触发change事件,在change事件处理函数中通过e.detail.current获取索引值,再通过setData()赋给data中的...
  • Pandas有四个重要数据对象:Series数据对象、DataFrame数据对象索引数据对象以及时间序列数据对象本文将介绍Pandas索引对象,主要内容如下:Pandas索引对象Pandas索引是基础的数据对象,是组成Pandas其他数据对象...
  • 对象索引 Indexer 为对象生成索引值列表的 IndexFunc 和 IndexFunc 集合 Indexers 索引缓存 Index 和 Indices 为对象生成唯一标识 Key 的 KeyFunc 可并发访问的索引缓存 ThreadSafeStore Add/Update() 方法 ...
  • NSMutableArray 中的对象是这样: **“0,1,0,1,1,1,0,0”** 然后我要获取所有值为“ **1** ”的...但是根据文档说明中方法`indexOfObject`是返回最低索引值,那么我应该怎么获取值为 **“1”** 的对象索引呢?
  • 索引缓冲对象

    千次阅读 2020-01-27 19:00:48
    OpenGL中的索引缓冲对象
  • pandas的索引对象

    千次阅读 2018-01-03 21:34:04
    pandas两个最重要的数据结构Series和DataFrame都具备索引,pandas的索引对象负责管理轴标签和其他元数据(如轴名称等)。在创建Series或DataFrame的时候,用到的数组或其他序列的标签都会被装换成一个Index对象。 1...
  • pandas索引对象

    千次阅读 2017-05-09 16:07:46
    索引对象 Index对象是不可修改的(immutable),这样才能使Index对象在多个数据结构之间安全共享。 In [1]: import pandas as pd In [2]: from pandas import Series, DataFrame In [3]: import numpy as np ...
  • Oracle数据库对象-索引

    2019-06-17 20:54:46
    1.索引是数据库对象之一,用于加快数据的检索,在数据库中索引可以减少数据库程序查询结果时需要读取的数据量。 2.索引是建立在表上的可选对象索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式...
  • 索引对象 Pandas 相对 Numpy的一大变化就是丰富了数据的索引及其方法 Series 和 DataFrame 的索引----index对象 和 MultiIndex对象 1.index对象 每个 Series 对象都有一个 index 属性,通过此属性就能得到 index...
  • 1、定义了对象索引器之后,就可以使用索引的方法得到对象中的某个属性 如 person[0] person并不是数组也不是集合,只是我们将他里面的属性封装成数组或集合,然后通过公开这个数组或集合来让外部使用者调用 ...
  • 面向对象——索引

    千次阅读 2020-04-13 09:20:50
    索引器:封装了类的私有数组的操作,没有名字 定义索引器的格式: public 数组中元素的数据类型 关键字(this) [下标] { get//根据下标获取数组中该下标所对应的元素 { //先判断下标是否越界 if (下标 &...
  • obj = pd.Series(range(5),index=['a','a','b','b','c']) #pandas支持重复索引  可以直接用Series['索引名']:obj['a']    也可以使用obj.a  loc和iloc同样适用   2、DataFrame   frame = pd....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,896
精华内容 16,358
关键字:

对象索引